From 4cfa7d538522d736b9893b90166af8bf7e90f8d8 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Fri, 22 Mar 2024 20:07:29 +0000 Subject: [PATCH] Fix role fuckup --- .../TvNoms.Core/Entities/IEntity.cs | 2 +- .../TvNoms.Core/Entities/Role.cs | 18 ++ .../TvNoms.Core/Entities/User.cs | 20 --- .../Models/Medias/DeleteMediaForm.cs | 2 +- .../TvNoms.Core/Models/Medias/MediaModel.cs | 2 +- .../TvNoms.Core/Models/Users/EditUserForm.cs | 2 +- .../TvNoms.Core/Models/Users/UserModel.cs | 4 +- .../Utilities/ReflectionExtensions.cs | 54 +++--- src/tvnoms-server/TvNoms.Data/AppDbContext.cs | 3 +- .../Extensions/DbContextExtensions.cs | 40 +++-- ....cs => 20240322200711_Initial.Designer.cs} | 159 +++++++++--------- ...6_Initial.cs => 20240322200711_Initial.cs} | 29 +--- .../Migrations/AppDbContextModelSnapshot.cs | 157 ++++++++--------- 13 files changed, 230 insertions(+), 262 deletions(-) create mode 100644 src/tvnoms-server/TvNoms.Core/Entities/Role.cs rename src/tvnoms-server/TvNoms.Data/Migrations/{20240322193356_Initial.Designer.cs => 20240322200711_Initial.Designer.cs} (94%) rename src/tvnoms-server/TvNoms.Data/Migrations/{20240322193356_Initial.cs => 20240322200711_Initial.cs} (93%) diff --git a/src/tvnoms-server/TvNoms.Core/Entities/IEntity.cs b/src/tvnoms-server/TvNoms.Core/Entities/IEntity.cs index 854754f..1b3f4e5 100644 --- a/src/tvnoms-server/TvNoms.Core/Entities/IEntity.cs +++ b/src/tvnoms-server/TvNoms.Core/Entities/IEntity.cs @@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema; namespace TvNoms.Core.Entities; public interface IEntity { - public Guid Id { get; } + Guid Id { get; } } public class BaseEntity : IEntity { diff --git a/src/tvnoms-server/TvNoms.Core/Entities/Role.cs b/src/tvnoms-server/TvNoms.Core/Entities/Role.cs new file mode 100644 index 0000000..3e21ef8 --- /dev/null +++ b/src/tvnoms-server/TvNoms.Core/Entities/Role.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Identity; + +namespace TvNoms.Core.Entities; + +public class Role : IdentityRole, IEntity { + public Role() { + } + + public Role(string roleName) : base(roleName) { + } + + + public const string Admin = nameof(Admin); + + public const string Member = nameof(Member); + + public static IEnumerable All => new[] { Admin, Member }; +} diff --git a/src/tvnoms-server/TvNoms.Core/Entities/User.cs b/src/tvnoms-server/TvNoms.Core/Entities/User.cs index 6042ab7..a432560 100644 --- a/src/tvnoms-server/TvNoms.Core/Entities/User.cs +++ b/src/tvnoms-server/TvNoms.Core/Entities/User.cs @@ -11,7 +11,6 @@ public class User : IdentityUser, IEntity { public string? Location { get; set; } public bool Active { get; set; } public DateTimeOffset LastActiveAt { get; set; } - public virtual ICollection Roles { get; set; } = new List(); public virtual ICollection Clients { get; set; } = new List(); @@ -19,9 +18,6 @@ public class User : IdentityUser, IEntity { public bool PhoneNumberRequired { get; set; } } -public class UserRole : IdentityUserRole, IEntity { - Guid IEntity.Id { get; } -} public class UserSession : IEntity { public Guid Id { get; set; } @@ -35,19 +31,3 @@ public class UserSession : IEntity { public string RefreshTokenHash { get; set; } = default!; public DateTimeOffset RefreshTokenExpiresAt { get; set; } } - -public class Role : IdentityRole, IEntity { - public Role() { - } - - public Role(string roleName) : base(roleName) { - } - - public virtual ICollection Users { get; set; } = new List(); - - public const string Admin = nameof(Admin); - - public const string Member = nameof(Member); - - public static IEnumerable All => new[] { Admin, Member }; -} diff --git a/src/tvnoms-server/TvNoms.Core/Models/Medias/DeleteMediaForm.cs b/src/tvnoms-server/TvNoms.Core/Models/Medias/DeleteMediaForm.cs index b59591b..ff5f6d9 100644 --- a/src/tvnoms-server/TvNoms.Core/Models/Medias/DeleteMediaForm.cs +++ b/src/tvnoms-server/TvNoms.Core/Models/Medias/DeleteMediaForm.cs @@ -3,7 +3,7 @@ namespace TvNoms.Core.Models.Medias; public class DeleteMediaForm { - public long Id { get; set; } + public Guid Id { get; set; } } public class DeleteMediaFormValidator : AbstractValidator { diff --git a/src/tvnoms-server/TvNoms.Core/Models/Medias/MediaModel.cs b/src/tvnoms-server/TvNoms.Core/Models/Medias/MediaModel.cs index 314b1bd..694cd7e 100644 --- a/src/tvnoms-server/TvNoms.Core/Models/Medias/MediaModel.cs +++ b/src/tvnoms-server/TvNoms.Core/Models/Medias/MediaModel.cs @@ -4,7 +4,7 @@ using AbstractProfile = AutoMapper.Profile; namespace TvNoms.Core.Models.Medias; public class MediaModel { - public long Id { get; set; } + public Guid Id { get; set; } public string Path { get; set; } = default!; diff --git a/src/tvnoms-server/TvNoms.Core/Models/Users/EditUserForm.cs b/src/tvnoms-server/TvNoms.Core/Models/Users/EditUserForm.cs index b942919..eb60851 100644 --- a/src/tvnoms-server/TvNoms.Core/Models/Users/EditUserForm.cs +++ b/src/tvnoms-server/TvNoms.Core/Models/Users/EditUserForm.cs @@ -16,7 +16,7 @@ public class EditUserForm { public string? PhoneNumber { get; set; } = default!; - public long? AvatarId { get; set; } + public Guid? AvatarId { get; set; } public string? Bio { get; set; } } diff --git a/src/tvnoms-server/TvNoms.Core/Models/Users/UserModel.cs b/src/tvnoms-server/TvNoms.Core/Models/Users/UserModel.cs index 8bc5e39..13624a9 100644 --- a/src/tvnoms-server/TvNoms.Core/Models/Users/UserModel.cs +++ b/src/tvnoms-server/TvNoms.Core/Models/Users/UserModel.cs @@ -4,7 +4,7 @@ using AbstractProfile = AutoMapper.Profile; namespace TvNoms.Core.Models.Users; public class UserModel { - public long Id { get; set; } + public Guid Id { get; set; } public string? UserName { get; set; } @@ -20,7 +20,7 @@ public class UserModel { public bool PhoneNumberRequired { get; set; } - public long? AvatarId { get; set; } + public Guid? AvatarId { get; set; } public string? AvatarUrl { get; set; } diff --git a/src/tvnoms-server/TvNoms.Core/Utilities/ReflectionExtensions.cs b/src/tvnoms-server/TvNoms.Core/Utilities/ReflectionExtensions.cs index 25988d3..ceaf49b 100644 --- a/src/tvnoms-server/TvNoms.Core/Utilities/ReflectionExtensions.cs +++ b/src/tvnoms-server/TvNoms.Core/Utilities/ReflectionExtensions.cs @@ -1,34 +1,32 @@ -namespace TvNoms.Core.Utilities { - public static class ReflectionExtensions { - public static bool IsCompatibleWith(this Type type, Type otherType) { - return otherType.IsGenericTypeDefinition - ? type.IsAssignableToGenericTypeDefinition(otherType) - : otherType.IsAssignableFrom(type); +namespace TvNoms.Core.Utilities; + +public static class ReflectionExtensions { + public static bool IsCompatibleWith(this Type type, Type otherType) { + return otherType.IsGenericTypeDefinition + ? type.IsAssignableToGenericTypeDefinition(otherType) + : otherType.IsAssignableFrom(type); + } + + private static bool IsAssignableToGenericTypeDefinition(this Type type, Type genericType) { + foreach (var interfaceType in type.GetInterfaces()) { + if (!interfaceType.IsGenericType) { + continue; + } + + var genericTypeDefinition = interfaceType.GetGenericTypeDefinition(); + if (genericTypeDefinition == genericType) { + return true; + } } - private static bool IsAssignableToGenericTypeDefinition(this Type type, Type genericType) { - foreach (var interfaceType in type.GetInterfaces()) { - if (interfaceType.IsGenericType) { - var genericTypeDefinition = interfaceType.GetGenericTypeDefinition(); - if (genericTypeDefinition == genericType) { - return true; - } - } + if (type.IsGenericType) { + var genericTypeDefinition = type.GetGenericTypeDefinition(); + if (genericTypeDefinition == genericType) { + return true; } - - if (type.IsGenericType) { - var genericTypeDefinition = type.GetGenericTypeDefinition(); - if (genericTypeDefinition == genericType) { - return true; - } - } - - var baseType = type.BaseType; - if (baseType is null) { - return false; - } - - return baseType.IsAssignableToGenericTypeDefinition(genericType); } + + var baseType = type.BaseType; + return baseType is not null && baseType.IsAssignableToGenericTypeDefinition(genericType); } } diff --git a/src/tvnoms-server/TvNoms.Data/AppDbContext.cs b/src/tvnoms-server/TvNoms.Data/AppDbContext.cs index 4074668..0a2ab56 100644 --- a/src/tvnoms-server/TvNoms.Data/AppDbContext.cs +++ b/src/tvnoms-server/TvNoms.Data/AppDbContext.cs @@ -9,8 +9,7 @@ using TvNoms.Server.Data.Extensions; namespace TvNoms.Server.Data; public class AppDbContext(IConfiguration configuration) : - IdentityDbContext, - UserRole, IdentityUserLogin, IdentityRoleClaim, IdentityUserToken> { + IdentityDbContext, Guid> { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseNpgsql(configuration.GetConnectionString("DefaultConnection")); diff --git a/src/tvnoms-server/TvNoms.Data/Extensions/DbContextExtensions.cs b/src/tvnoms-server/TvNoms.Data/Extensions/DbContextExtensions.cs index 304eef4..bb2a6dd 100644 --- a/src/tvnoms-server/TvNoms.Data/Extensions/DbContextExtensions.cs +++ b/src/tvnoms-server/TvNoms.Data/Extensions/DbContextExtensions.cs @@ -8,8 +8,10 @@ namespace TvNoms.Server.Data.Extensions; public static class DbContextExtensions { public static ModelBuilder ApplyEntities(this ModelBuilder modelBuilder, IEnumerable assemblies, Func? predicate = null) { - var entityTypes = assemblies.SelectMany(_ => _.DefinedTypes).Select(_ => _.AsType()) - .Where(type => type.IsClass && !type.IsAbstract && !type.IsGenericType && + var entityTypes = assemblies + .SelectMany(_ => _.DefinedTypes) + .Select(_ => _.AsType()) + .Where(type => type is { IsClass: true, IsAbstract: false, IsGenericType: false } && type.IsCompatibleWith(typeof(IEntity)) && (predicate?.Invoke(type) ?? true)); foreach (var entityType in entityTypes) { @@ -21,20 +23,27 @@ public static class DbContextExtensions { public static ModelBuilder ApplyConfigurations(this ModelBuilder modelBuilder, IEnumerable assemblies, Func? predicate = null) { - var entityTypeConfigurationTypes = assemblies.SelectMany(_ => _.DefinedTypes).Select(_ => _.AsType()) - .Where(type => type.IsClass && !type.IsAbstract && !type.IsGenericType && - type.IsCompatibleWith(typeof(IEntityTypeConfiguration<>)) && (predicate?.Invoke(type) ?? true)); + var entityTypeConfigurationTypes = assemblies + .SelectMany(_ => _.DefinedTypes) + .Select(_ => _.AsType()) + .Where(type => + type is { IsClass: true, IsAbstract: false, IsGenericType: false } && + type.IsCompatibleWith(typeof(IEntityTypeConfiguration<>)) && + (predicate?.Invoke(type) ?? true)); var applyEntityConfigurationMethod = typeof(ModelBuilder) .GetMethods() .Single( - e => e.Name == nameof(ModelBuilder.ApplyConfiguration) - && e.ContainsGenericParameters - && e.GetParameters().SingleOrDefault()?.ParameterType.GetGenericTypeDefinition() - == typeof(IEntityTypeConfiguration<>)); + e => + e is { Name: nameof(ModelBuilder.ApplyConfiguration), ContainsGenericParameters: true } && + e + .GetParameters() + .SingleOrDefault()?.ParameterType + .GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>)); foreach (var entityTypeConfigurationType in entityTypeConfigurationTypes) { - // Only accept types that contain a parameterless constructor, are not abstract and satisfy a predicate if it was used. + // Only accept types that contain a parameterless constructor, + // are not abstract and satisfy a predicate if it was used. if (entityTypeConfigurationType.GetConstructor(Type.EmptyTypes) == null || (!predicate?.Invoke(entityTypeConfigurationType) ?? false)) { continue; @@ -45,10 +54,15 @@ public static class DbContextExtensions { continue; } - if (@interface.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>)) { - var target = applyEntityConfigurationMethod.MakeGenericMethod(@interface.GenericTypeArguments[0]); - target.Invoke(modelBuilder, new[] { Activator.CreateInstance(entityTypeConfigurationType) }); + if (@interface.GetGenericTypeDefinition() != typeof(IEntityTypeConfiguration<>)) { + continue; } + + var target = applyEntityConfigurationMethod + .MakeGenericMethod(@interface.GenericTypeArguments[0]); + target.Invoke(modelBuilder, [ + Activator.CreateInstance(entityTypeConfigurationType) + ]); } } diff --git a/src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.Designer.cs b/src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.Designer.cs similarity index 94% rename from src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.Designer.cs rename to src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.Designer.cs index d23e2b8..8708210 100644 --- a/src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.Designer.cs +++ b/src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.Designer.cs @@ -12,7 +12,7 @@ using TvNoms.Server.Data; namespace TvNoms.Server.Data.Migrations { [DbContext(typeof(AppDbContext))] - [Migration("20240322193356_Initial")] + [Migration("20240322200711_Initial")] partial class Initial { /// @@ -25,6 +25,42 @@ namespace TvNoms.Server.Data.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("character varying(21)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityRole"); + + b.UseTphMappingStrategy(); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") @@ -94,6 +130,21 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("AspNetUserLogins", (string)null); }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") @@ -141,33 +192,6 @@ namespace TvNoms.Server.Data.Migrations b.UseTphMappingStrategy(); }); - modelBuilder.Entity("TvNoms.Core.Entities.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - modelBuilder.Entity("TvNoms.Core.Entities.User", b => { b.Property("Id") @@ -264,31 +288,6 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("AspNetUsers", (string)null); }); - modelBuilder.Entity("TvNoms.Core.Entities.UserRole", b => - { - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("RoleId") - .HasColumnType("uuid"); - - b.Property("RoleId1") - .HasColumnType("uuid"); - - b.Property("UserId1") - .HasColumnType("uuid"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.HasIndex("RoleId1"); - - b.HasIndex("UserId1"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - modelBuilder.Entity("TvNoms.Core.Entities.UserSession", b => { b.Property("Id") @@ -319,6 +318,13 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("UserSession"); }); + modelBuilder.Entity("TvNoms.Core.Entities.Role", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityRole"); + + b.HasDiscriminator().HasValue("Role"); + }); + modelBuilder.Entity("TvNoms.Core.Entities.Client", b => { b.HasBaseType("TvNoms.Core.Entities.BaseEntity"); @@ -417,7 +423,7 @@ namespace TvNoms.Server.Data.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.HasOne("TvNoms.Core.Entities.Role", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) @@ -442,6 +448,21 @@ namespace TvNoms.Server.Data.Migrations .IsRequired(); }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("TvNoms.Core.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("TvNoms.Core.Entities.User", null) @@ -460,29 +481,6 @@ namespace TvNoms.Server.Data.Migrations b.Navigation("Avatar"); }); - modelBuilder.Entity("TvNoms.Core.Entities.UserRole", b => - { - b.HasOne("TvNoms.Core.Entities.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("TvNoms.Core.Entities.Role", null) - .WithMany("Users") - .HasForeignKey("RoleId1"); - - b.HasOne("TvNoms.Core.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("TvNoms.Core.Entities.User", null) - .WithMany("Roles") - .HasForeignKey("UserId1"); - }); - modelBuilder.Entity("TvNoms.Core.Entities.UserSession", b => { b.HasOne("TvNoms.Core.Entities.User", "User") @@ -503,16 +501,9 @@ namespace TvNoms.Server.Data.Migrations b.Navigation("User"); }); - modelBuilder.Entity("TvNoms.Core.Entities.Role", b => - { - b.Navigation("Users"); - }); - modelBuilder.Entity("TvNoms.Core.Entities.User", b => { b.Navigation("Clients"); - - b.Navigation("Roles"); }); #pragma warning restore 612, 618 } diff --git a/src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.cs b/src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.cs similarity index 93% rename from src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.cs rename to src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.cs index 818e8de..6ee7119 100644 --- a/src/tvnoms-server/TvNoms.Data/Migrations/20240322193356_Initial.cs +++ b/src/tvnoms-server/TvNoms.Data/Migrations/20240322200711_Initial.cs @@ -19,7 +19,8 @@ namespace TvNoms.Server.Data.Migrations Id = table.Column(type: "uuid", nullable: false), Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), - ConcurrencyStamp = table.Column(type: "text", nullable: true) + ConcurrencyStamp = table.Column(type: "text", nullable: true), + Discriminator = table.Column(type: "character varying(21)", maxLength: 21, nullable: false) }, constraints: table => { @@ -81,9 +82,7 @@ namespace TvNoms.Server.Data.Migrations columns: table => new { UserId = table.Column(type: "uuid", nullable: false), - RoleId = table.Column(type: "uuid", nullable: false), - RoleId1 = table.Column(type: "uuid", nullable: true), - UserId1 = table.Column(type: "uuid", nullable: true) + RoleId = table.Column(type: "uuid", nullable: false) }, constraints: table => { @@ -94,11 +93,6 @@ namespace TvNoms.Server.Data.Migrations principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AspNetUserRoles_AspNetRoles_RoleId1", - column: x => x.RoleId1, - principalTable: "AspNetRoles", - principalColumn: "Id"); }); migrationBuilder.CreateTable( @@ -240,16 +234,6 @@ namespace TvNoms.Server.Data.Migrations table: "AspNetUserRoles", column: "RoleId"); - migrationBuilder.CreateIndex( - name: "IX_AspNetUserRoles_RoleId1", - table: "AspNetUserRoles", - column: "RoleId1"); - - migrationBuilder.CreateIndex( - name: "IX_AspNetUserRoles_UserId1", - table: "AspNetUserRoles", - column: "UserId1"); - migrationBuilder.CreateIndex( name: "EmailIndex", table: "AspNetUsers", @@ -300,13 +284,6 @@ namespace TvNoms.Server.Data.Migrations principalColumn: "Id", onDelete: ReferentialAction.Cascade); - migrationBuilder.AddForeignKey( - name: "FK_AspNetUserRoles_AspNetUsers_UserId1", - table: "AspNetUserRoles", - column: "UserId1", - principalTable: "AspNetUsers", - principalColumn: "Id"); - migrationBuilder.AddForeignKey( name: "FK_AspNetUsers_BaseEntity_AvatarId", table: "AspNetUsers", diff --git a/src/tvnoms-server/TvNoms.Data/Migrations/AppDbContextModelSnapshot.cs b/src/tvnoms-server/TvNoms.Data/Migrations/AppDbContextModelSnapshot.cs index 4757896..f682f9a 100644 --- a/src/tvnoms-server/TvNoms.Data/Migrations/AppDbContextModelSnapshot.cs +++ b/src/tvnoms-server/TvNoms.Data/Migrations/AppDbContextModelSnapshot.cs @@ -22,6 +22,42 @@ namespace TvNoms.Server.Data.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("character varying(21)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityRole"); + + b.UseTphMappingStrategy(); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") @@ -91,6 +127,21 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("AspNetUserLogins", (string)null); }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") @@ -138,33 +189,6 @@ namespace TvNoms.Server.Data.Migrations b.UseTphMappingStrategy(); }); - modelBuilder.Entity("TvNoms.Core.Entities.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - modelBuilder.Entity("TvNoms.Core.Entities.User", b => { b.Property("Id") @@ -261,31 +285,6 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("AspNetUsers", (string)null); }); - modelBuilder.Entity("TvNoms.Core.Entities.UserRole", b => - { - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("RoleId") - .HasColumnType("uuid"); - - b.Property("RoleId1") - .HasColumnType("uuid"); - - b.Property("UserId1") - .HasColumnType("uuid"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.HasIndex("RoleId1"); - - b.HasIndex("UserId1"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - modelBuilder.Entity("TvNoms.Core.Entities.UserSession", b => { b.Property("Id") @@ -316,6 +315,13 @@ namespace TvNoms.Server.Data.Migrations b.ToTable("UserSession"); }); + modelBuilder.Entity("TvNoms.Core.Entities.Role", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityRole"); + + b.HasDiscriminator().HasValue("Role"); + }); + modelBuilder.Entity("TvNoms.Core.Entities.Client", b => { b.HasBaseType("TvNoms.Core.Entities.BaseEntity"); @@ -414,7 +420,7 @@ namespace TvNoms.Server.Data.Migrations modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { - b.HasOne("TvNoms.Core.Entities.Role", null) + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) @@ -439,6 +445,21 @@ namespace TvNoms.Server.Data.Migrations .IsRequired(); }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("TvNoms.Core.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("TvNoms.Core.Entities.User", null) @@ -457,29 +478,6 @@ namespace TvNoms.Server.Data.Migrations b.Navigation("Avatar"); }); - modelBuilder.Entity("TvNoms.Core.Entities.UserRole", b => - { - b.HasOne("TvNoms.Core.Entities.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("TvNoms.Core.Entities.Role", null) - .WithMany("Users") - .HasForeignKey("RoleId1"); - - b.HasOne("TvNoms.Core.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("TvNoms.Core.Entities.User", null) - .WithMany("Roles") - .HasForeignKey("UserId1"); - }); - modelBuilder.Entity("TvNoms.Core.Entities.UserSession", b => { b.HasOne("TvNoms.Core.Entities.User", "User") @@ -500,16 +498,9 @@ namespace TvNoms.Server.Data.Migrations b.Navigation("User"); }); - modelBuilder.Entity("TvNoms.Core.Entities.Role", b => - { - b.Navigation("Users"); - }); - modelBuilder.Entity("TvNoms.Core.Entities.User", b => { b.Navigation("Clients"); - - b.Navigation("Roles"); }); #pragma warning restore 612, 618 }