From e0ecd862886f5434a763e7c70ec7fb719dc40fdf Mon Sep 17 00:00:00 2001 From: martinshoob Date: Mon, 11 Aug 2025 20:12:42 +0200 Subject: [PATCH] Establish a one-to-one relationship Define a one-to-one relationship between CompanyTable and ProductTable. Correct a typo in the CompanyTable DbSet name within the ApplicationDbContext to ensure correct database mapping and operations. --- DrinkRateAPI/Contexts/ApplicationDbContext.cs | 6 +- DrinkRateAPI/DbEntities/DbCompanyTable.cs | 3 + DrinkRateAPI/DbEntities/DbProductTable.cs | 3 + ...050_ProductCompanyTableBinding.Designer.cs | 974 ++++++++++++++++++ ...250811180050_ProductCompanyTableBinding.cs | 63 ++ .../20250811181117_FixTypo.Designer.cs | 974 ++++++++++++++++++ .../Migrations/20250811181117_FixTypo.cs | 150 +++ .../ApplicationDbContextModelSnapshot.cs | 25 +- 8 files changed, 2196 insertions(+), 2 deletions(-) create mode 100644 DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.Designer.cs create mode 100644 DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.cs create mode 100644 DrinkRateAPI/Migrations/20250811181117_FixTypo.Designer.cs create mode 100644 DrinkRateAPI/Migrations/20250811181117_FixTypo.cs diff --git a/DrinkRateAPI/Contexts/ApplicationDbContext.cs b/DrinkRateAPI/Contexts/ApplicationDbContext.cs index 14cfccb..ffa8ff6 100644 --- a/DrinkRateAPI/Contexts/ApplicationDbContext.cs +++ b/DrinkRateAPI/Contexts/ApplicationDbContext.cs @@ -9,7 +9,7 @@ public class ApplicationDbContext : IdentityDbContext Companies { get; set; } public DbSet CompanyRatings { get; set; } - public DbSet CompanyTables { get; set; } + public DbSet CompanyTable { get; set; } public DbSet CompanyTableViews { get; set; } public DbSet Product { get; set; } @@ -85,6 +85,10 @@ public class ApplicationDbContext : IdentityDbContext ct.CompanyTableName) .IsUnique(); + + entity.HasOne(ct => ct.ProductTable) + .WithOne(pt => pt.CompanyTable) + .HasForeignKey(pt => pt.CompanyTableId); }); // Company Table View diff --git a/DrinkRateAPI/DbEntities/DbCompanyTable.cs b/DrinkRateAPI/DbEntities/DbCompanyTable.cs index 285563c..e68e514 100644 --- a/DrinkRateAPI/DbEntities/DbCompanyTable.cs +++ b/DrinkRateAPI/DbEntities/DbCompanyTable.cs @@ -7,4 +7,7 @@ public class DbCompanyTable public ICollection Companies { get; set; } public string CompanyTableName { get; set; } + + public Guid ProductTableId { get; set; } + public DbProductTable ProductTable { get; set; } } \ No newline at end of file diff --git a/DrinkRateAPI/DbEntities/DbProductTable.cs b/DrinkRateAPI/DbEntities/DbProductTable.cs index dcc9724..e04564e 100644 --- a/DrinkRateAPI/DbEntities/DbProductTable.cs +++ b/DrinkRateAPI/DbEntities/DbProductTable.cs @@ -7,4 +7,7 @@ public class DbProductTable public ICollection Products { get; set; } public string ProductTableName { get; set; } + + public Guid CompanyTableId { get; set; } + public DbCompanyTable CompanyTable { get; set; } } \ No newline at end of file diff --git a/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.Designer.cs b/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.Designer.cs new file mode 100644 index 0000000..8846e71 --- /dev/null +++ b/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.Designer.cs @@ -0,0 +1,974 @@ +// +using System; +using DrinkRateAPI.Contexts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace DrinkRateAPI.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20250811180050_ProductCompanyTableBinding")] + partial class ProductCompanyTableBinding + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DbCompanyTableDbCompanyTableView", b => + { + b.Property("CompanyTablesId") + .HasColumnType("uuid"); + + b.Property("DbCompanyTableViewId") + .HasColumnType("uuid"); + + b.HasKey("CompanyTablesId", "DbCompanyTableViewId"); + + b.HasIndex("DbCompanyTableViewId"); + + b.ToTable("DbCompanyTableDbCompanyTableView"); + }); + + modelBuilder.Entity("DbCompanyTableViewDbUserProfile", b => + { + b.Property("CompanyTableViewsId") + .HasColumnType("uuid"); + + b.Property("UserProfilesId") + .HasColumnType("uuid"); + + b.HasKey("CompanyTableViewsId", "UserProfilesId"); + + b.HasIndex("UserProfilesId"); + + b.ToTable("DbCompanyTableViewDbUserProfile"); + }); + + modelBuilder.Entity("DbProductTableDbProductTableView", b => + { + b.Property("DbProductTableViewId") + .HasColumnType("uuid"); + + b.Property("ProductTablesId") + .HasColumnType("uuid"); + + b.HasKey("DbProductTableViewId", "ProductTablesId"); + + b.HasIndex("ProductTablesId"); + + b.ToTable("DbProductTableDbProductTableView"); + }); + + modelBuilder.Entity("DbProductTableViewDbUserProfile", b => + { + b.Property("ProductTableViewsId") + .HasColumnType("uuid"); + + b.Property("UserProfilesId") + .HasColumnType("uuid"); + + b.HasKey("ProductTableViewsId", "UserProfilesId"); + + b.HasIndex("UserProfilesId"); + + b.ToTable("DbProductTableViewDbUserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbApplicationUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .HasColumnType("integer"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PasswordHash") + .HasColumnType("text"); + + b.Property("PhoneNumber") + .HasColumnType("text"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("boolean"); + + b.Property("SecurityStamp") + .HasColumnType("text"); + + b.Property("TwoFactorEnabled") + .HasColumnType("boolean"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("RatingCount") + .HasColumnType("bigint"); + + b.Property("RatingSum") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CompanyName") + .IsUnique(); + + b.HasIndex("CompanyTableId"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("CompanyId") + .HasColumnType("uuid"); + + b.Property("Comment") + .HasColumnType("text"); + + b.Property("Rating") + .HasColumnType("smallint"); + + b.HasKey("UserProfileId", "CompanyId"); + + b.HasIndex("CompanyId"); + + b.ToTable("CompanyRatings"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyTableName") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CompanyTableName") + .IsUnique(); + + b.ToTable("CompanyTables"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("CompanyTableViews"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyId") + .HasColumnType("uuid"); + + b.Property("ProductName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.Property("RatingCount") + .HasColumnType("bigint"); + + b.Property("RatingSum") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CompanyId"); + + b.HasIndex("ProductName") + .IsUnique(); + + b.HasIndex("ProductTableId"); + + b.ToTable("Product"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("ProductId") + .HasColumnType("uuid"); + + b.Property("Comment") + .HasColumnType("text"); + + b.Property("Rating") + .HasColumnType("smallint"); + + b.HasKey("UserProfileId", "ProductId"); + + b.HasIndex("ProductId"); + + b.ToTable("ProductRating"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("ProductTableName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompanyTableId") + .IsUnique(); + + b.HasIndex("ProductTableName") + .IsUnique(); + + b.ToTable("ProductTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTableView", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("ProductTableView"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DbCompanyId") + .HasColumnType("uuid"); + + b.Property("DbCompanyRatingCompanyId") + .HasColumnType("uuid"); + + b.Property("DbCompanyRatingUserProfileId") + .HasColumnType("uuid"); + + b.Property("DbCompanyTableViewId") + .HasColumnType("uuid"); + + b.Property("DbProductId") + .HasColumnType("uuid"); + + b.Property("DbProductRatingProductId") + .HasColumnType("uuid"); + + b.Property("DbProductRatingUserProfileId") + .HasColumnType("uuid"); + + b.Property("DbProductTableViewId") + .HasColumnType("uuid"); + + b.Property("UpdateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("DbCompanyId"); + + b.HasIndex("DbCompanyTableViewId"); + + b.HasIndex("DbProductId"); + + b.HasIndex("DbProductTableViewId"); + + b.HasIndex("UserProfileId"); + + b.HasIndex("DbCompanyRatingUserProfileId", "DbCompanyRatingCompanyId"); + + b.HasIndex("DbProductRatingUserProfileId", "DbProductRatingProductId"); + + b.ToTable("UpdateRecords"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecordFieldChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DbUpdateRecordId") + .HasColumnType("uuid"); + + b.Property("Field") + .IsRequired() + .HasColumnType("text"); + + b.Property("NewValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("OldValue") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("DbUpdateRecordId"); + + b.ToTable("UpdateRecordFieldChanges"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationUserId") + .HasColumnType("uuid"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("UserProfiles"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileCompanyTableStat", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("Credits") + .HasColumnType("integer"); + + b.Property("HighestRatingCount") + .HasColumnType("integer"); + + b.Property("RatingCount") + .HasColumnType("integer"); + + b.HasKey("UserProfileId", "CompanyTableId"); + + b.HasIndex("CompanyTableId"); + + b.ToTable("UserProfileCompanyTableStats"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileProductTableStat", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.Property("Credits") + .HasColumnType("integer"); + + b.Property("HighestRatingCount") + .HasColumnType("integer"); + + b.Property("RatingCount") + .HasColumnType("integer"); + + b.HasKey("UserProfileId", "ProductTableId"); + + b.HasIndex("ProductTableId"); + + b.ToTable("UserProfileProductTableStats"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", 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("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + 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") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("DbCompanyTableDbCompanyTableView", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", null) + .WithMany() + .HasForeignKey("CompanyTablesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany() + .HasForeignKey("DbCompanyTableViewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbCompanyTableViewDbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany() + .HasForeignKey("CompanyTableViewsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", null) + .WithMany() + .HasForeignKey("UserProfilesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbProductTableDbProductTableView", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany() + .HasForeignKey("DbProductTableViewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", null) + .WithMany() + .HasForeignKey("ProductTablesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbProductTableViewDbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany() + .HasForeignKey("ProductTableViewsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", null) + .WithMany() + .HasForeignKey("UserProfilesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithMany("Companies") + .HasForeignKey("CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", "Company") + .WithMany("CompanyRatings") + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("CompanyRatings") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", "Company") + .WithMany("Products") + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", "ProductTable") + .WithMany("Products") + .HasForeignKey("ProductTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("ProductTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProduct", "Product") + .WithMany("ProductRatings") + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("ProductRatings") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Product"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithOne("ProductTable") + .HasForeignKey("DrinkRateAPI.DbEntities.DbProductTable", "CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", null) + .WithMany("History") + .HasForeignKey("DbCompanyId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany("History") + .HasForeignKey("DbCompanyTableViewId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProduct", null) + .WithMany("History") + .HasForeignKey("DbProductId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany("History") + .HasForeignKey("DbProductTableViewId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("History") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyRating", null) + .WithMany("History") + .HasForeignKey("DbCompanyRatingUserProfileId", "DbCompanyRatingCompanyId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductRating", null) + .WithMany("History") + .HasForeignKey("DbProductRatingUserProfileId", "DbProductRatingProductId"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecordFieldChange", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbUpdateRecord", null) + .WithMany("UpdateRecordFieldChanges") + .HasForeignKey("DbUpdateRecordId"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", "ApplicationUser") + .WithOne("UserProfile") + .HasForeignKey("DrinkRateAPI.DbEntities.DbUserProfile", "ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileCompanyTableStat", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithMany() + .HasForeignKey("CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("UserProfileCompanyTableStats") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileProductTableStat", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", "ProductTable") + .WithMany() + .HasForeignKey("ProductTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("UserProfileProductTableStats") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProductTable"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbApplicationUser", b => + { + b.Navigation("UserProfile") + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.Navigation("CompanyRatings"); + + b.Navigation("History"); + + b.Navigation("Products"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTable", b => + { + b.Navigation("Companies"); + + b.Navigation("ProductTable") + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.Navigation("History"); + + b.Navigation("ProductRatings"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.Navigation("Products"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTableView", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.Navigation("UpdateRecordFieldChanges"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.Navigation("CompanyRatings"); + + b.Navigation("History"); + + b.Navigation("ProductRatings"); + + b.Navigation("UserProfileCompanyTableStats"); + + b.Navigation("UserProfileProductTableStats"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.cs b/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.cs new file mode 100644 index 0000000..67929a3 --- /dev/null +++ b/DrinkRateAPI/Migrations/20250811180050_ProductCompanyTableBinding.cs @@ -0,0 +1,63 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DrinkRateAPI.Migrations +{ + /// + public partial class ProductCompanyTableBinding : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "CompanyTableId", + table: "ProductTable", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); + + migrationBuilder.AddColumn( + name: "ProductTableId", + table: "CompanyTables", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); + + migrationBuilder.CreateIndex( + name: "IX_ProductTable_CompanyTableId", + table: "ProductTable", + column: "CompanyTableId", + unique: true); + + migrationBuilder.AddForeignKey( + name: "FK_ProductTable_CompanyTables_CompanyTableId", + table: "ProductTable", + column: "CompanyTableId", + principalTable: "CompanyTables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ProductTable_CompanyTables_CompanyTableId", + table: "ProductTable"); + + migrationBuilder.DropIndex( + name: "IX_ProductTable_CompanyTableId", + table: "ProductTable"); + + migrationBuilder.DropColumn( + name: "CompanyTableId", + table: "ProductTable"); + + migrationBuilder.DropColumn( + name: "ProductTableId", + table: "CompanyTables"); + } + } +} diff --git a/DrinkRateAPI/Migrations/20250811181117_FixTypo.Designer.cs b/DrinkRateAPI/Migrations/20250811181117_FixTypo.Designer.cs new file mode 100644 index 0000000..be12c26 --- /dev/null +++ b/DrinkRateAPI/Migrations/20250811181117_FixTypo.Designer.cs @@ -0,0 +1,974 @@ +// +using System; +using DrinkRateAPI.Contexts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace DrinkRateAPI.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20250811181117_FixTypo")] + partial class FixTypo + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DbCompanyTableDbCompanyTableView", b => + { + b.Property("CompanyTablesId") + .HasColumnType("uuid"); + + b.Property("DbCompanyTableViewId") + .HasColumnType("uuid"); + + b.HasKey("CompanyTablesId", "DbCompanyTableViewId"); + + b.HasIndex("DbCompanyTableViewId"); + + b.ToTable("DbCompanyTableDbCompanyTableView"); + }); + + modelBuilder.Entity("DbCompanyTableViewDbUserProfile", b => + { + b.Property("CompanyTableViewsId") + .HasColumnType("uuid"); + + b.Property("UserProfilesId") + .HasColumnType("uuid"); + + b.HasKey("CompanyTableViewsId", "UserProfilesId"); + + b.HasIndex("UserProfilesId"); + + b.ToTable("DbCompanyTableViewDbUserProfile"); + }); + + modelBuilder.Entity("DbProductTableDbProductTableView", b => + { + b.Property("DbProductTableViewId") + .HasColumnType("uuid"); + + b.Property("ProductTablesId") + .HasColumnType("uuid"); + + b.HasKey("DbProductTableViewId", "ProductTablesId"); + + b.HasIndex("ProductTablesId"); + + b.ToTable("DbProductTableDbProductTableView"); + }); + + modelBuilder.Entity("DbProductTableViewDbUserProfile", b => + { + b.Property("ProductTableViewsId") + .HasColumnType("uuid"); + + b.Property("UserProfilesId") + .HasColumnType("uuid"); + + b.HasKey("ProductTableViewsId", "UserProfilesId"); + + b.HasIndex("UserProfilesId"); + + b.ToTable("DbProductTableViewDbUserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbApplicationUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .HasColumnType("integer"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PasswordHash") + .HasColumnType("text"); + + b.Property("PhoneNumber") + .HasColumnType("text"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("boolean"); + + b.Property("SecurityStamp") + .HasColumnType("text"); + + b.Property("TwoFactorEnabled") + .HasColumnType("boolean"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("RatingCount") + .HasColumnType("bigint"); + + b.Property("RatingSum") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CompanyName") + .IsUnique(); + + b.HasIndex("CompanyTableId"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("CompanyId") + .HasColumnType("uuid"); + + b.Property("Comment") + .HasColumnType("text"); + + b.Property("Rating") + .HasColumnType("smallint"); + + b.HasKey("UserProfileId", "CompanyId"); + + b.HasIndex("CompanyId"); + + b.ToTable("CompanyRatings"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyTableName") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CompanyTableName") + .IsUnique(); + + b.ToTable("CompanyTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("CompanyTableViews"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyId") + .HasColumnType("uuid"); + + b.Property("ProductName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.Property("RatingCount") + .HasColumnType("bigint"); + + b.Property("RatingSum") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CompanyId"); + + b.HasIndex("ProductName") + .IsUnique(); + + b.HasIndex("ProductTableId"); + + b.ToTable("Product"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("ProductId") + .HasColumnType("uuid"); + + b.Property("Comment") + .HasColumnType("text"); + + b.Property("Rating") + .HasColumnType("smallint"); + + b.HasKey("UserProfileId", "ProductId"); + + b.HasIndex("ProductId"); + + b.ToTable("ProductRating"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("ProductTableName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CompanyTableId") + .IsUnique(); + + b.HasIndex("ProductTableName") + .IsUnique(); + + b.ToTable("ProductTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTableView", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("ProductTableView"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DbCompanyId") + .HasColumnType("uuid"); + + b.Property("DbCompanyRatingCompanyId") + .HasColumnType("uuid"); + + b.Property("DbCompanyRatingUserProfileId") + .HasColumnType("uuid"); + + b.Property("DbCompanyTableViewId") + .HasColumnType("uuid"); + + b.Property("DbProductId") + .HasColumnType("uuid"); + + b.Property("DbProductRatingProductId") + .HasColumnType("uuid"); + + b.Property("DbProductRatingUserProfileId") + .HasColumnType("uuid"); + + b.Property("DbProductTableViewId") + .HasColumnType("uuid"); + + b.Property("UpdateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("DbCompanyId"); + + b.HasIndex("DbCompanyTableViewId"); + + b.HasIndex("DbProductId"); + + b.HasIndex("DbProductTableViewId"); + + b.HasIndex("UserProfileId"); + + b.HasIndex("DbCompanyRatingUserProfileId", "DbCompanyRatingCompanyId"); + + b.HasIndex("DbProductRatingUserProfileId", "DbProductRatingProductId"); + + b.ToTable("UpdateRecords"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecordFieldChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DbUpdateRecordId") + .HasColumnType("uuid"); + + b.Property("Field") + .IsRequired() + .HasColumnType("text"); + + b.Property("NewValue") + .IsRequired() + .HasColumnType("text"); + + b.Property("OldValue") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("DbUpdateRecordId"); + + b.ToTable("UpdateRecordFieldChanges"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationUserId") + .HasColumnType("uuid"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("UserProfiles"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileCompanyTableStat", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("CompanyTableId") + .HasColumnType("uuid"); + + b.Property("Credits") + .HasColumnType("integer"); + + b.Property("HighestRatingCount") + .HasColumnType("integer"); + + b.Property("RatingCount") + .HasColumnType("integer"); + + b.HasKey("UserProfileId", "CompanyTableId"); + + b.HasIndex("CompanyTableId"); + + b.ToTable("UserProfileCompanyTableStats"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileProductTableStat", b => + { + b.Property("UserProfileId") + .HasColumnType("uuid"); + + b.Property("ProductTableId") + .HasColumnType("uuid"); + + b.Property("Credits") + .HasColumnType("integer"); + + b.Property("HighestRatingCount") + .HasColumnType("integer"); + + b.Property("RatingCount") + .HasColumnType("integer"); + + b.HasKey("UserProfileId", "ProductTableId"); + + b.HasIndex("ProductTableId"); + + b.ToTable("UserProfileProductTableStats"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", 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("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + 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") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("DbCompanyTableDbCompanyTableView", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", null) + .WithMany() + .HasForeignKey("CompanyTablesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany() + .HasForeignKey("DbCompanyTableViewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbCompanyTableViewDbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany() + .HasForeignKey("CompanyTableViewsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", null) + .WithMany() + .HasForeignKey("UserProfilesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbProductTableDbProductTableView", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany() + .HasForeignKey("DbProductTableViewId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", null) + .WithMany() + .HasForeignKey("ProductTablesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DbProductTableViewDbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany() + .HasForeignKey("ProductTableViewsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", null) + .WithMany() + .HasForeignKey("UserProfilesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithMany("Companies") + .HasForeignKey("CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", "Company") + .WithMany("CompanyRatings") + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("CompanyRatings") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", "Company") + .WithMany("Products") + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", "ProductTable") + .WithMany("Products") + .HasForeignKey("ProductTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("ProductTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProduct", "Product") + .WithMany("ProductRatings") + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("ProductRatings") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Product"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithOne("ProductTable") + .HasForeignKey("DrinkRateAPI.DbEntities.DbProductTable", "CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompany", null) + .WithMany("History") + .HasForeignKey("DbCompanyId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTableView", null) + .WithMany("History") + .HasForeignKey("DbCompanyTableViewId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProduct", null) + .WithMany("History") + .HasForeignKey("DbProductId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductTableView", null) + .WithMany("History") + .HasForeignKey("DbProductTableViewId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("History") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyRating", null) + .WithMany("History") + .HasForeignKey("DbCompanyRatingUserProfileId", "DbCompanyRatingCompanyId"); + + b.HasOne("DrinkRateAPI.DbEntities.DbProductRating", null) + .WithMany("History") + .HasForeignKey("DbProductRatingUserProfileId", "DbProductRatingProductId"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecordFieldChange", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbUpdateRecord", null) + .WithMany("UpdateRecordFieldChanges") + .HasForeignKey("DbUpdateRecordId"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", "ApplicationUser") + .WithOne("UserProfile") + .HasForeignKey("DrinkRateAPI.DbEntities.DbUserProfile", "ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileCompanyTableStat", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithMany() + .HasForeignKey("CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("UserProfileCompanyTableStats") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfileProductTableStat", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbProductTable", "ProductTable") + .WithMany() + .HasForeignKey("ProductTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbUserProfile", "UserProfile") + .WithMany("UserProfileProductTableStats") + .HasForeignKey("UserProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProductTable"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbApplicationUser", b => + { + b.Navigation("UserProfile") + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompany", b => + { + b.Navigation("CompanyRatings"); + + b.Navigation("History"); + + b.Navigation("Products"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyRating", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTable", b => + { + b.Navigation("Companies"); + + b.Navigation("ProductTable") + .IsRequired(); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProduct", b => + { + b.Navigation("History"); + + b.Navigation("ProductRatings"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductRating", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.Navigation("Products"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTableView", b => + { + b.Navigation("History"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => + { + b.Navigation("UpdateRecordFieldChanges"); + }); + + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUserProfile", b => + { + b.Navigation("CompanyRatings"); + + b.Navigation("History"); + + b.Navigation("ProductRatings"); + + b.Navigation("UserProfileCompanyTableStats"); + + b.Navigation("UserProfileProductTableStats"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DrinkRateAPI/Migrations/20250811181117_FixTypo.cs b/DrinkRateAPI/Migrations/20250811181117_FixTypo.cs new file mode 100644 index 0000000..6bd86c9 --- /dev/null +++ b/DrinkRateAPI/Migrations/20250811181117_FixTypo.cs @@ -0,0 +1,150 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DrinkRateAPI.Migrations +{ + /// + public partial class FixTypo : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Companies_CompanyTables_CompanyTableId", + table: "Companies"); + + migrationBuilder.DropForeignKey( + name: "FK_DbCompanyTableDbCompanyTableView_CompanyTables_CompanyTable~", + table: "DbCompanyTableDbCompanyTableView"); + + migrationBuilder.DropForeignKey( + name: "FK_ProductTable_CompanyTables_CompanyTableId", + table: "ProductTable"); + + migrationBuilder.DropForeignKey( + name: "FK_UserProfileCompanyTableStats_CompanyTables_CompanyTableId", + table: "UserProfileCompanyTableStats"); + + migrationBuilder.DropPrimaryKey( + name: "PK_CompanyTables", + table: "CompanyTables"); + + migrationBuilder.RenameTable( + name: "CompanyTables", + newName: "CompanyTable"); + + migrationBuilder.RenameIndex( + name: "IX_CompanyTables_CompanyTableName", + table: "CompanyTable", + newName: "IX_CompanyTable_CompanyTableName"); + + migrationBuilder.AddPrimaryKey( + name: "PK_CompanyTable", + table: "CompanyTable", + column: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Companies_CompanyTable_CompanyTableId", + table: "Companies", + column: "CompanyTableId", + principalTable: "CompanyTable", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_DbCompanyTableDbCompanyTableView_CompanyTable_CompanyTables~", + table: "DbCompanyTableDbCompanyTableView", + column: "CompanyTablesId", + principalTable: "CompanyTable", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ProductTable_CompanyTable_CompanyTableId", + table: "ProductTable", + column: "CompanyTableId", + principalTable: "CompanyTable", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_UserProfileCompanyTableStats_CompanyTable_CompanyTableId", + table: "UserProfileCompanyTableStats", + column: "CompanyTableId", + principalTable: "CompanyTable", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Companies_CompanyTable_CompanyTableId", + table: "Companies"); + + migrationBuilder.DropForeignKey( + name: "FK_DbCompanyTableDbCompanyTableView_CompanyTable_CompanyTables~", + table: "DbCompanyTableDbCompanyTableView"); + + migrationBuilder.DropForeignKey( + name: "FK_ProductTable_CompanyTable_CompanyTableId", + table: "ProductTable"); + + migrationBuilder.DropForeignKey( + name: "FK_UserProfileCompanyTableStats_CompanyTable_CompanyTableId", + table: "UserProfileCompanyTableStats"); + + migrationBuilder.DropPrimaryKey( + name: "PK_CompanyTable", + table: "CompanyTable"); + + migrationBuilder.RenameTable( + name: "CompanyTable", + newName: "CompanyTables"); + + migrationBuilder.RenameIndex( + name: "IX_CompanyTable_CompanyTableName", + table: "CompanyTables", + newName: "IX_CompanyTables_CompanyTableName"); + + migrationBuilder.AddPrimaryKey( + name: "PK_CompanyTables", + table: "CompanyTables", + column: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Companies_CompanyTables_CompanyTableId", + table: "Companies", + column: "CompanyTableId", + principalTable: "CompanyTables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_DbCompanyTableDbCompanyTableView_CompanyTables_CompanyTable~", + table: "DbCompanyTableDbCompanyTableView", + column: "CompanyTablesId", + principalTable: "CompanyTables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ProductTable_CompanyTables_CompanyTableId", + table: "ProductTable", + column: "CompanyTableId", + principalTable: "CompanyTables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_UserProfileCompanyTableStats_CompanyTables_CompanyTableId", + table: "UserProfileCompanyTableStats", + column: "CompanyTableId", + principalTable: "CompanyTables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + } +} diff --git a/DrinkRateAPI/Migrations/ApplicationDbContextModelSnapshot.cs b/DrinkRateAPI/Migrations/ApplicationDbContextModelSnapshot.cs index 67d58bf..17454b4 100644 --- a/DrinkRateAPI/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/DrinkRateAPI/Migrations/ApplicationDbContextModelSnapshot.cs @@ -208,12 +208,15 @@ namespace DrinkRateAPI.Migrations .IsRequired() .HasColumnType("text"); + b.Property("ProductTableId") + .HasColumnType("uuid"); + b.HasKey("Id"); b.HasIndex("CompanyTableName") .IsUnique(); - b.ToTable("CompanyTables"); + b.ToTable("CompanyTable"); }); modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b => @@ -289,12 +292,18 @@ namespace DrinkRateAPI.Migrations .ValueGeneratedOnAdd() .HasColumnType("uuid"); + b.Property("CompanyTableId") + .HasColumnType("uuid"); + b.Property("ProductTableName") .IsRequired() .HasColumnType("text"); b.HasKey("Id"); + b.HasIndex("CompanyTableId") + .IsUnique(); + b.HasIndex("ProductTableName") .IsUnique(); @@ -731,6 +740,17 @@ namespace DrinkRateAPI.Migrations b.Navigation("UserProfile"); }); + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbProductTable", b => + { + b.HasOne("DrinkRateAPI.DbEntities.DbCompanyTable", "CompanyTable") + .WithOne("ProductTable") + .HasForeignKey("DrinkRateAPI.DbEntities.DbProductTable", "CompanyTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyTable"); + }); + modelBuilder.Entity("DrinkRateAPI.DbEntities.DbUpdateRecord", b => { b.HasOne("DrinkRateAPI.DbEntities.DbCompany", null) @@ -896,6 +916,9 @@ namespace DrinkRateAPI.Migrations modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTable", b => { b.Navigation("Companies"); + + b.Navigation("ProductTable") + .IsRequired(); }); modelBuilder.Entity("DrinkRateAPI.DbEntities.DbCompanyTableView", b =>