66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
using MealPlan.Api.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace MealPlan.Api.Data;
|
|
|
|
/// <summary>
|
|
/// Database-first context for the existing PostgreSQL database.
|
|
/// Tables are mapped explicitly; this context never creates or alters schema.
|
|
/// </summary>
|
|
public class AppDbContext : DbContext
|
|
{
|
|
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
|
|
{
|
|
}
|
|
|
|
public DbSet<Recipe> Recipes => Set<Recipe>();
|
|
public DbSet<Ingredient> Ingredients => Set<Ingredient>();
|
|
public DbSet<RecipeStep> RecipeSteps => Set<RecipeStep>();
|
|
public DbSet<ApplicationUser> Users => Set<ApplicationUser>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
modelBuilder.HasDefaultSchema("diet");
|
|
|
|
modelBuilder.Entity<Recipe>(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<Ingredient>(e =>
|
|
{
|
|
e.HasKey(i => i.Id);
|
|
e.Property(i => i.Id).UseIdentityByDefaultColumn();
|
|
e.Property(i => i.AmountGrams).HasColumnType("numeric(8,2)");
|
|
});
|
|
|
|
modelBuilder.Entity<RecipeStep>(e =>
|
|
{
|
|
e.HasKey(s => s.Id);
|
|
e.Property(s => s.Id).UseIdentityByDefaultColumn();
|
|
});
|
|
|
|
modelBuilder.Entity<ApplicationUser>(e =>
|
|
{
|
|
e.HasKey(u => u.Id);
|
|
e.Property(u => u.Id).HasColumnType("uuid");
|
|
});
|
|
}
|
|
}
|