Initial commit
This commit is contained in:
65
MealPlan.Api/Data/AppDbContext.cs
Normal file
65
MealPlan.Api/Data/AppDbContext.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
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");
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user