using Microsoft.EntityFrameworkCore; namespace Api; public sealed class AppDbContext(DbContextOptions options) : DbContext(options) { public DbSet Customers => Set(); public DbSet Products => Set(); public DbSet
Addresses => Set
(); public DbSet Carriers => Set(); public DbSet Orders => Set(); public DbSet OrderLines => Set(); public DbSet Payments => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(e => { e.Property(c => c.Name).HasMaxLength(100); e.Property(c => c.Email).HasMaxLength(200); e.Property(c => c.Country).HasMaxLength(2); }); modelBuilder.Entity(e => { e.Property(p => p.Sku).HasMaxLength(20); e.Property(p => p.Name).HasMaxLength(100); }); modelBuilder.Entity
(e => { e.Property(a => a.Street).HasMaxLength(100); e.Property(a => a.City).HasMaxLength(60); e.Property(a => a.PostalCode).HasMaxLength(12); e.Property(a => a.Country).HasMaxLength(2); }); modelBuilder.Entity(e => e.Property(c => c.Name).HasMaxLength(40)); modelBuilder.Entity(e => { e.Property(o => o.Status).HasMaxLength(20); e.HasOne(o => o.Customer).WithMany().HasForeignKey(o => o.CustomerId); e.HasOne(o => o.ShippingAddress).WithMany().HasForeignKey(o => o.ShippingAddressId); e.HasOne(o => o.BillingAddress).WithMany().HasForeignKey(o => o.BillingAddressId); e.HasOne(o => o.Carrier).WithMany().HasForeignKey(o => o.CarrierId); e.HasMany(o => o.Lines).WithOne().HasForeignKey(l => l.OrderId); e.HasMany(o => o.Payments).WithOne().HasForeignKey(p => p.OrderId); e.HasIndex(o => new { o.CustomerId, o.OrderedAt }); e.HasIndex(o => o.OrderedAt); }); modelBuilder.Entity(e => { e.HasOne(l => l.Product).WithMany().HasForeignKey(l => l.ProductId); }); modelBuilder.Entity(e => { e.Property(p => p.Method).HasMaxLength(20); }); } }