using Microsoft.EntityFrameworkCore; using MealPlanner.Models; namespace MealPlanner.Data; public class AppDbContext(DbContextOptions options) : DbContext(options) { public DbSet Recipes => Set(); public DbSet RecipeIngredients => Set(); public DbSet MealPlans => Set(); public DbSet MealPlanEntries => Set(); public DbSet UserSettings => Set(); public DbSet CheckedShoppingItems => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Recipe modelBuilder.Entity(e => { e.HasKey(r => r.Id); e.HasIndex(r => r.UserId); e.HasIndex(r => r.ExternalId); e.HasMany(r => r.Ingredients) .WithOne(i => i.Recipe) .HasForeignKey(i => i.RecipeId) .OnDelete(DeleteBehavior.Cascade); }); // RecipeIngredient modelBuilder.Entity(e => { e.HasKey(i => i.Id); }); // MealPlan modelBuilder.Entity(e => { e.HasKey(p => p.Id); e.HasIndex(p => new { p.UserId, p.WeekStart }).IsUnique(); e.HasMany(p => p.Entries) .WithOne(en => en.MealPlan) .HasForeignKey(en => en.MealPlanId) .OnDelete(DeleteBehavior.Cascade); }); // MealPlanEntry modelBuilder.Entity(e => { e.HasKey(en => en.Id); e.HasOne(en => en.Recipe) .WithMany() .HasForeignKey(en => en.RecipeId) .OnDelete(DeleteBehavior.Restrict); }); // UserSettings modelBuilder.Entity(e => { e.HasKey(s => s.UserId); }); // CheckedShoppingItem modelBuilder.Entity(e => { e.HasKey(c => c.Id); e.HasIndex(c => new { c.MealPlanId, c.UserId, c.ItemName }); }); } }