using Budget.Core.Models; using Microsoft.EntityFrameworkCore; namespace Budget.Infrastructure.Data; public class AppDbContext(DbContextOptions options) : DbContext(options) { public DbSet Budgets => Set(); public DbSet Incomes => Set(); public DbSet Outgos => Set(); public DbSet KnownUsers => Set(); public DbSet BudgetShares => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(b => { b.HasKey(x => x.Id); b.Property(x => x.Name).IsRequired().HasMaxLength(200); b.Property(x => x.OwnerUserId).IsRequired().HasMaxLength(200); b.HasMany(x => x.Incomes).WithOne(i => i.Budget).HasForeignKey(i => i.BudgetId).OnDelete(DeleteBehavior.Cascade); b.HasMany(x => x.Outgos).WithOne(o => o.Budget).HasForeignKey(o => o.BudgetId).OnDelete(DeleteBehavior.Cascade); b.HasMany(x => x.Shares).WithOne(s => s.Budget).HasForeignKey(s => s.BudgetId).OnDelete(DeleteBehavior.Cascade); b.HasQueryFilter(x => !x.IsDeleted); b.Property("xmin") .HasColumnType("xid") .ValueGeneratedOnAddOrUpdate() .IsConcurrencyToken(); }); modelBuilder.Entity(b => { b.HasKey(x => x.Id); b.Property(x => x.Name).IsRequired().HasMaxLength(200); b.Property(x => x.Amount).HasPrecision(18, 2); b.HasQueryFilter(x => !x.IsDeleted); }); modelBuilder.Entity(b => { b.HasKey(x => x.Id); b.Property(x => x.Name).IsRequired().HasMaxLength(200); b.Property(x => x.Category).HasMaxLength(100); b.Property(x => x.PaymentSource).HasMaxLength(100); b.Property(x => x.Notes).HasMaxLength(1000); b.Property(x => x.Amount).HasPrecision(18, 2); b.HasQueryFilter(x => !x.IsDeleted); }); modelBuilder.Entity(b => { b.HasKey(x => x.Id); b.Property(x => x.Id).HasMaxLength(200); b.Property(x => x.Email).IsRequired().HasMaxLength(200); b.Property(x => x.Name).IsRequired().HasMaxLength(200); }); modelBuilder.Entity(b => { b.HasKey(x => x.Id); b.Property(x => x.SharedWithUserId).HasMaxLength(200); b.Property(x => x.SharedWithEmail).IsRequired().HasMaxLength(200); b.HasIndex(x => new { x.BudgetId, x.SharedWithEmail }).IsUnique(); b.HasQueryFilter(x => !x.IsDeleted); }); } }