using Microsoft.EntityFrameworkCore; using Recepie.Models; namespace Recepie.Data { public class RecipeContext : DbContext { public RecipeContext(DbContextOptions options) : base(options) { } public DbSet Recipes { get; set; } public DbSet Ingredients { get; set; } public DbSet RecipeIngredientLinks { get; set; } public DbSet RecipeSteps { get; set; } public DbSet WeekPlans { get; set; } public DbSet DayPlans { get; set; } // public DbSet RecipeImages { get; set; } // Temporarily disabled for main page performance protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(entity => { // Map to existing lowercase table name entity.ToTable("recepie"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("id"); // Map our model properties to your database columns entity.Property(e => e.Title).HasColumnName("name").IsRequired(); entity.Property(e => e.Description).HasColumnName("description"); entity.Property(e => e.Difficulty).HasColumnName("difficulty"); entity.Property(e => e.Url).HasColumnName("url"); entity.Property(e => e.Time).HasColumnName("time"); // Index for better search performance entity.HasIndex(e => e.Title); }); modelBuilder.Entity(entity => { entity.ToTable("ingredient"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.Name).HasColumnName("name"); }); modelBuilder.Entity(entity => { entity.ToTable("recepieIngredientLink"); entity.HasKey(e => new { e.RecipeId, e.IngredientId }); entity.Property(e => e.RecipeId).HasColumnName("recepieId"); entity.Property(e => e.IngredientId).HasColumnName("ingredientId"); entity.Property(e => e.Amount).HasColumnName("amount"); entity.Property(e => e.Measurement).HasColumnName("measurement"); // Configure relationships entity.HasOne(e => e.Recipe) .WithMany(r => r.RecipeIngredients) .HasForeignKey(e => e.RecipeId); entity.HasOne(e => e.Ingredient) .WithMany() .HasForeignKey(e => e.IngredientId); }); modelBuilder.Entity(entity => { entity.ToTable("recepieSteps"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.RecipeId).HasColumnName("recepieId"); entity.Property(e => e.StepNumber).HasColumnName("stepNumber"); entity.Property(e => e.Text).HasColumnName("text"); // Configure relationship entity.HasOne(e => e.Recipe) .WithMany(r => r.RecipeSteps) .HasForeignKey(e => e.RecipeId); }); // Week Planner Configuration modelBuilder.Entity(entity => { entity.ToTable("weekplan"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.Name).HasColumnName("name").HasMaxLength(255); entity.Property(e => e.StartDate).HasColumnName("startdate"); entity.Property(e => e.CreatedAt).HasColumnName("createdat"); }); modelBuilder.Entity(entity => { entity.ToTable("dayplan"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.WeekPlanId).HasColumnName("weekplanid"); entity.Property(e => e.DayOfWeek).HasColumnName("dayofweek"); entity.Property(e => e.Date).HasColumnName("date"); entity.Property(e => e.RecipeId).HasColumnName("recipeid"); entity.Property(e => e.MainIngredient).HasColumnName("mainingredient").HasMaxLength(100); entity.Property(e => e.BannedIngredients).HasColumnName("bannedingredients").HasMaxLength(500); entity.Property(e => e.RequiredIngredients).HasColumnName("requiredingredients").HasMaxLength(500); entity.HasOne(d => d.WeekPlan) .WithMany(p => p.DayPlans) .HasForeignKey(d => d.WeekPlanId); entity.HasOne(d => d.Recipe) .WithMany() .HasForeignKey(d => d.RecipeId); }); // Temporarily disabled RecipeImage configuration for performance /* modelBuilder.Entity(entity => { entity.ToTable("recepieImage"); entity.HasKey(e => e.RecipeId); entity.Property(e => e.RecipeId).HasColumnName("recepieId"); entity.Property(e => e.ImageData).HasColumnName("image"); // Configure relationship entity.HasOne(e => e.Recipe) .WithOne(r => r.RecipeImage) .HasForeignKey(e => e.RecipeId); }); */ } } }