using Microsoft.EntityFrameworkCore; using PetCompanion.Models; namespace PetCompanion.Data { public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } public DbSet Pets { get; set; } public DbSet PetStats { get; set; } public DbSet Resources { get; set; } public DbSet Skills { get; set; } public DbSet SkillEffects { get; set; } public DbSet PetSkills { get; set; } public DbSet GameItems { get; set; } public DbSet Inventories { get; set; } public DbSet EquippedItems { get; set; } public DbSet ActionGathered { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Configure DateTime properties to be stored as UTC modelBuilder.Entity() .Property(p => p.GatherActionSince) .HasConversion( v => v.ToUniversalTime(), v => DateTime.SpecifyKind(v, DateTimeKind.Utc)); modelBuilder.Entity() .Property(p => p.BasicActionCooldown) .HasConversion( v => v != DateTime.MinValue ? v.ToUniversalTime() : v, v => v != DateTime.MinValue ? DateTime.SpecifyKind(v, DateTimeKind.Utc) : v); modelBuilder.Entity() .HasOne(ps => ps.Pet) .WithMany(p => p.Skills) .HasForeignKey(ps => ps.PetId); modelBuilder.Entity() .HasOne(ps => ps.Skill) .WithMany(s => s.PetSkills) .HasForeignKey(ps => ps.SkillId); modelBuilder.Entity() .HasOne(se => se.Skill) .WithMany(s => s.Effects) .HasForeignKey(se => se.SkillId); modelBuilder.Entity() .HasOne(se => se.Skill) .WithMany(s => s.SkillRequirements) .HasForeignKey(se => se.SkillId); modelBuilder.Entity() .HasOne(e => e.Pet) .WithMany(p => p.EquippedItemsList) .HasForeignKey(e => e.PetId); modelBuilder.Entity() .HasOne(e => e.GameItem) .WithMany() .HasForeignKey(e => e.GameItemId); modelBuilder.Entity() .HasOne(ag => ag.Pet) .WithMany(p => p.ActionGathered) .HasForeignKey(ag => ag.PetId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasOne(ag => ag.GameItem) .WithMany() .HasForeignKey(ag => ag.ItemId); // Seed initial data var skills = SkillsData.GetInitialSkillsWithoutRelations(); var requirements = SkillsData.GetInitialSkillRequirements(); var effects = SkillsData.GetInitialSkillEffects(); modelBuilder.Entity().HasData(skills); modelBuilder.Entity().HasData(requirements); modelBuilder.Entity().HasData(effects); } } }