using Distribution.Models; using Microsoft.EntityFrameworkCore; namespace Distribution.Data; public class AppDBContext(DbContextOptions options) : DbContext(options) { public DbSet Regions { get; set; } public DbSet Routes { get; set; } public DbSet Vehicles { get; set; } public DbSet Stores { get; set; } public DbSet Warehouses { get; set; } public DbSet Categories { get; set; } public DbSet SubCategories { get; set; } public DbSet Brands { get; set; } public DbSet Uoms { get; set; } public DbSet UomConversions { get; set; } public DbSet Items { get; set; } public DbSet SaleRoutes { get; set; } public DbSet Orders { get; set; } public DbSet OrderItems { get; set; } public DbSet DeliveryRuns { get; set; } public DbSet Users { get; set; } public DbSet Roles { get; set; } public DbSet Permissions { get; set; } public DbSet RolePermissions { get; set; } public DbSet UserRegionScopes { get; set; } public DbSet UserRouteScopes { get; set; } public DbSet UserStoreScopes { get; set; } public DbSet StockBalances { get; set; } public DbSet StockMovements { get; set; } public DbSet StoreKycDocuments { get; set; } public DbSet PriceLists { get; set; } public DbSet PriceListItems { get; set; } public DbSet Suppliers { get; set; } public DbSet DriverProfiles { get; set; } public DbSet DriverComplianceConfigs { get; set; } public DbSet RideCancelRequests { get; set; } public DbSet Schemes { get; set; } public DbSet SchemeRedemptions { get; set; } public DbSet SchemeBundleComponents { get; set; } public DbSet LoadingSheets { get; set; } public DbSet LoadingSheetItems { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(oi => new { oi.FK_OrderId, oi.FK_ItemId }); modelBuilder.Entity() .HasKey(rp => new { rp.FK_RoleId, rp.FK_PermissionId }); modelBuilder.Entity() .HasKey(s => new { s.FK_UserId, s.FK_RegionId }); modelBuilder.Entity() .HasKey(s => new { s.FK_UserId, s.FK_RouteId }); modelBuilder.Entity() .HasKey(s => new { s.FK_UserId, s.FK_StoreId }); modelBuilder.Entity() .HasOne(u => u.ReportsTo) .WithMany() .HasForeignKey(u => u.FK_ReportsToUserId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasIndex(sb => new { sb.FK_ItemId, sb.LocationId }) .IsUnique(); modelBuilder.Entity() .HasIndex(pli => new { pli.FK_PriceListId, pli.FK_ItemId }) .IsUnique(); modelBuilder.Entity() .HasIndex(dp => dp.FK_UserId) .IsUnique(); modelBuilder.Entity() .HasOne() .WithMany() .HasForeignKey(nameof(Vehicle.DefaultWarehouseId)) .OnDelete(DeleteBehavior.Restrict) .IsRequired(false); modelBuilder.Entity() .HasOne(r => r.SourceWarehouse) .WithMany() .HasForeignKey(r => r.FK_SourceWarehouseId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(r => r.DriverProfile) .WithMany() .HasForeignKey(r => r.FK_DriverProfileId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(r => r.Scheme) .WithMany(s => s.Redemptions) .HasForeignKey(r => r.FK_SchemeId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(r => r.Order) .WithMany() .HasForeignKey(r => r.FK_OrderId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(r => r.FreeItem) .WithMany() .HasForeignKey(r => r.FK_FreeItemId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(s => s.TriggerItem) .WithMany() .HasForeignKey(s => s.FK_TriggerItemId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(s => s.FreeItem) .WithMany() .HasForeignKey(s => s.FK_FreeItemId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(c => c.Scheme) .WithMany(s => s.BundleComponents) .HasForeignKey(c => c.FK_SchemeId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasOne(c => c.Item) .WithMany() .HasForeignKey(c => c.FK_ItemId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasIndex(c => new { c.FK_SchemeId, c.FK_ItemId }) .IsUnique(); modelBuilder.Entity() .HasOne(s => s.SourceWarehouse) .WithMany() .HasForeignKey(s => s.FK_SourceWarehouseId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(s => s.Ride) .WithMany() .HasForeignKey(s => s.FK_RideId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(i => i.Item) .WithMany() .HasForeignKey(i => i.FK_ItemId) .OnDelete(DeleteBehavior.Restrict); Seed.RoleAndPermissionSeed.Apply(modelBuilder); } }