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; } 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(e => e.Pet) .WithMany(p => p.EquippedItemsList) .HasForeignKey(e => e.PetId); modelBuilder.Entity() .HasOne(e => e.GameItem) .WithMany() .HasForeignKey(e => e.GameItemId); // Seed initial skills var skills = SkillsData.GetInitialSkills(); var skillWithoutEffects = SkillsData.GetInitialSkills().Select(s => new Skill { Id = s.Id, Name = s.Name, Type = s.Type, Description = s.Description, PointsCost = s.PointsCost, Icon = s.Icon, SkillsIdRequired = s.SkillsIdRequired }).ToList(); foreach (var skill in skillWithoutEffects) { modelBuilder.Entity().HasData(skill); } foreach (var skill in skills) { foreach (var effect in skill.Effects) { modelBuilder.Entity().HasData(effect); } } } } }