using EngineeringSync.Domain.Entities; using Microsoft.EntityFrameworkCore; namespace EngineeringSync.Infrastructure; public class AppDbContext(DbContextOptions options) : DbContext(options) { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (optionsBuilder.IsConfigured) return; // WAL-Modus für bessere Nebenläufigkeit zwischen Watcher-Writer und API-Reader optionsBuilder.UseSqlite(o => o.CommandTimeout(30)); } public DbSet Projects => Set(); public DbSet FileRevisions => Set(); public DbSet PendingChanges => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(e => { e.HasKey(p => p.Id); e.Property(p => p.Name).IsRequired().HasMaxLength(200); e.Property(p => p.EngineeringPath).IsRequired(); e.Property(p => p.SimulationPath).IsRequired(); e.Property(p => p.BackupEnabled).HasDefaultValue(true); e.Property(p => p.BackupPath).HasDefaultValue(null); e.Property(p => p.MaxBackupsPerFile).HasDefaultValue(0); }); modelBuilder.Entity(e => { e.HasKey(r => r.Id); e.HasIndex(r => new { r.ProjectId, r.RelativePath }).IsUnique(); e.HasOne(r => r.Project) .WithMany(p => p.FileRevisions) .HasForeignKey(r => r.ProjectId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(e => { e.HasKey(c => c.Id); e.HasOne(c => c.Project) .WithMany(p => p.PendingChanges) .HasForeignKey(c => c.ProjectId) .OnDelete(DeleteBehavior.Cascade); }); } }