using System.Runtime.InteropServices.ComTypes; using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore; namespace OpenWarehouse.warehouse.api.Data; public class ApplicationDbContext: DbContext, IDataProtectionKeyContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var itemInWarehouseClaims = modelBuilder.Entity(); itemInWarehouseClaims.HasOne(e => e.Item) .WithMany(e => e.ItemInWarehouseClaims) .HasForeignKey(e => e.ItemId); itemInWarehouseClaims.HasIndex(ic => new { ic.ItemId, ic.ClaimType }) .IsUnique(); var wrehouseClaims = modelBuilder.Entity(); wrehouseClaims.HasOne(e => e.Warehouse) .WithMany(e => e.Claims) .HasForeignKey(e => e.WarehouseId); wrehouseClaims.HasIndex(ic => new { ic.WarehouseId, ic.ClaimType }) .IsUnique(); var itemClaims = modelBuilder.Entity(); itemClaims.HasIndex(ic => new { ic.ItemId, ic.ClaimType }) .IsUnique(); itemClaims.HasOne(ic => ic.Item) .WithMany(i => i.ItemClaims) .HasForeignKey(ic => ic.ItemId); var itemTag = modelBuilder.Entity(); itemTag.HasOne(e => e.ParentTag) .WithMany(e => e.ListOfChildrenTag) .HasForeignKey(e => e.ParentTagId); itemTag.HasIndex(ic => new { ic.Name }) .IsUnique(); var item = modelBuilder.Entity(); item.HasOne(e => e.Producer) .WithMany(e => e.Items) .HasForeignKey(e => e.ProducerId) .IsRequired(true); item.HasIndex(ic => new { ic.Name, ic.ProducerId }) .IsUnique(); item.Navigation(ic => ic.ItemClaims) .UsePropertyAccessMode(PropertyAccessMode.Property); var producers = modelBuilder.Entity(); producers.HasIndex(ic => new { ic.Name }) .IsUnique(); producers.Navigation(ic => ic.Claims) .UsePropertyAccessMode(PropertyAccessMode.Property); var producerClaims = modelBuilder.Entity(); producerClaims.HasOne(e => e.Producer) .WithMany(e => e.Claims) .HasForeignKey(e => e.ProducerId); producerClaims.HasIndex(ic => new { ic.ProducerId, ic.ClaimType }) .IsUnique(); modelBuilder.Entity() .HasIndex(ic => ic.ClaimType) .IsUnique(); modelBuilder.Entity() .Navigation(ic => ic.ItemInWarehouseClaims) .UsePropertyAccessMode(PropertyAccessMode.Property); modelBuilder.Entity() .Navigation(ic => ic.Claims) .UsePropertyAccessMode(PropertyAccessMode.Property); } public DbSet Images { get; init; } public DbSet Items { get; init; } public DbSet ItemCategoryTags { get; init; } public DbSet ItemClaims { get; init; } public DbSet ItemInWarehouses { get; init; } public DbSet ItemInWarehousesClaims { get; init; } public DbSet Producers { get; init; } public DbSet ProducerClaims { get; init; } public DbSet Warehouses { get; init; } public DbSet WarehouseClaims { get; init; } public DbSet ServiceClaims { get; init; } public DbSet DataProtectionKeys { get; init; } public DbSet TaskStatus { get; init; } }