using Microsoft.EntityFrameworkCore; using public_valetax.Models; namespace public_valetax.Data { public class ApplicationDbContext(DbContextOptions options) : DbContext(options) { public DbSet Trees { get; set; } = null!; public DbSet Nodes { get; set; } = null!; public DbSet JournalEntries { get; set; } = null!; protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Configure Tree entity modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.Name).IsRequired().HasMaxLength(255); entity.HasIndex(e => e.Name).IsUnique(); }); // Configure Node entity modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.Name).IsRequired().HasMaxLength(255); // Self-referencing foreign key for parent-child relationship entity.HasOne(n => n.Parent) .WithMany(n => n.Children) .HasForeignKey(n => n.ParentId) .OnDelete(DeleteBehavior.Cascade); // Foreign key to Tree entity.HasOne(n => n.Tree) .WithMany(t => t.Nodes) .HasForeignKey(n => n.TreeId) .OnDelete(DeleteBehavior.Cascade); // Ensure unique node names within the same tree entity.HasIndex(n => new { n.TreeId, n.Name }).IsUnique(); }); // Configure JournalEntry entity modelBuilder.Entity(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.ExceptionType).IsRequired().HasMaxLength(255); entity.Property(e => e.Message).IsRequired(); entity.HasIndex(e => e.EventId).IsUnique(); }); } } }