using MealPlan.Api.Models; using Microsoft.EntityFrameworkCore; namespace MealPlan.Api.Data; /// /// Database-first context for the existing PostgreSQL database. /// Tables are mapped explicitly; this context never creates or alters schema. /// public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } public DbSet Recipes => Set(); public DbSet Ingredients => Set(); public DbSet RecipeSteps => Set(); public DbSet Users => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasDefaultSchema("diet"); modelBuilder.Entity(e => { e.HasKey(r => r.Id); e.Property(r => r.Id).UseIdentityByDefaultColumn(); e.Property(r => r.Protein).HasColumnType("numeric(6,2)"); e.Property(r => r.Fat).HasColumnType("numeric(6,2)"); e.Property(r => r.Carbs).HasColumnType("numeric(6,2)"); e.HasMany(r => r.Ingredients) .WithOne(i => i.Recipe!) .HasForeignKey(i => i.RecipeId) .OnDelete(DeleteBehavior.Cascade); e.HasMany(r => r.Steps) .WithOne(s => s.Recipe!) .HasForeignKey(s => s.RecipeId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(e => { e.HasKey(i => i.Id); e.Property(i => i.Id).UseIdentityByDefaultColumn(); e.Property(i => i.AmountGrams).HasColumnType("numeric(8,2)"); }); modelBuilder.Entity(e => { e.HasKey(s => s.Id); e.Property(s => s.Id).UseIdentityByDefaultColumn(); }); modelBuilder.Entity(e => { e.HasKey(u => u.Id); e.Property(u => u.Id).HasColumnType("uuid"); }); } }