using BirthList.Domain.Entities; using Microsoft.EntityFrameworkCore; namespace BirthList.Infrastructure.Persistence; public class RegistryDbContext(DbContextOptions options) : DbContext(options) { public DbSet Registries => Set(); public DbSet RegistryAdmins => Set(); public DbSet RegistryAdminInvites => Set(); public DbSet RegistrySettings => Set(); public DbSet RegistryItemCategories => Set(); public DbSet RegistryItems => Set(); public DbSet ItemPurchases => Set(); public DbSet ItemContributions => Set(); public DbSet RegistryVisits => Set(); public DbSet UserActionLogs => Set(); public DbSet PlatformOwners => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.Title).HasMaxLength(250); entity.Property(x => x.PublicLinkCode).HasMaxLength(100); entity.HasIndex(x => x.PublicLinkCode).IsUnique(); entity.Property(x => x.BabyName).HasMaxLength(100); entity.Property(x => x.CurrencyCode).HasMaxLength(3); entity.Property(x => x.ThemeKey).HasMaxLength(100); }); modelBuilder.Entity(entity => { entity.HasKey(x => new { x.RegistryId, x.UserId }); entity.Property(x => x.UserId).HasMaxLength(450); entity.HasOne(x => x.Registry) .WithMany(x => x.Admins) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.Token).HasMaxLength(120); entity.HasIndex(x => x.Token).IsUnique(); entity.Property(x => x.SentToEmail).HasMaxLength(320); entity.HasOne(x => x.Registry) .WithMany(x => x.AdminInvites) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.RegistryId); entity.Property(x => x.BankAccountIban).HasMaxLength(34); entity.Property(x => x.BankAccountBic).HasMaxLength(11); entity.Property(x => x.BankAccountDisplayName).HasMaxLength(120); entity.Property(x => x.ContributionQrCodeUrl).HasMaxLength(2048); entity.Property(x => x.ContributionAmountQrCodesJson).HasMaxLength(4000); entity.HasOne(x => x.Registry) .WithOne() .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.Name).HasMaxLength(100); entity.HasIndex(x => new { x.RegistryId, x.SortOrder }); entity.HasIndex(x => new { x.RegistryId, x.Name }); entity.HasOne(x => x.Registry) .WithMany(x => x.ItemCategories) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.Name).HasMaxLength(300); entity.Property(x => x.PictureUrl).HasMaxLength(2048); entity.Property(x => x.ProductUrl).HasMaxLength(2048); entity.Property(x => x.CurrencyCode).HasMaxLength(3); entity.Property(x => x.PriceAmount).HasPrecision(18, 2); entity.Property(x => x.ParticipationTargetAmount).HasPrecision(18, 2); entity.Property(x => x.MoneyFulfilledAmount).HasPrecision(18, 2); entity.HasIndex(x => new { x.CategoryId, x.SortOrder }); entity.HasOne(x => x.Registry) .WithMany(x => x.Items) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(x => x.Category) .WithMany(x => x.Items) .HasForeignKey(x => x.CategoryId) .OnDelete(DeleteBehavior.NoAction); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.UserId).HasMaxLength(450); entity.HasOne(x => x.RegistryItem) .WithMany(x => x.Purchases) .HasForeignKey(x => x.RegistryItemId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.UserId).HasMaxLength(450); entity.Property(x => x.CurrencyCode).HasMaxLength(3); entity.Property(x => x.Amount).HasPrecision(18, 2); entity.Property(x => x.TransferMessage).HasMaxLength(500); entity.HasOne(x => x.RegistryItem) .WithMany(x => x.Contributions) .HasForeignKey(x => x.RegistryItemId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => new { x.RegistryId, x.UserId }); entity.Property(x => x.UserId).HasMaxLength(450); entity.HasOne(x => x.Registry) .WithMany(x => x.Visits) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.UserId).HasMaxLength(450); entity.Property(x => x.Amount).HasPrecision(18, 2); entity.Property(x => x.Details).HasMaxLength(500); entity.HasOne(x => x.Registry) .WithMany(x => x.ActionLogs) .HasForeignKey(x => x.RegistryId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.UserId).HasMaxLength(450); entity.HasIndex(x => x.UserId).IsUnique(); }); } }