using Koogle.Domain.Entities; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace KoogleApp.Data; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } // Stammdaten / Aggregate Roots public DbSet Clubs => Set(); public DbSet Persons => Set(); public DbSet Days => Set(); public DbSet Games => Set(); public DbSet Expenses => Set(); public DbSet Triggers => Set(); public DbSet UserProfileClubRoleAssignments => Set(); // Ledger / Events public DbSet PersonExpenses => Set(); // Domain-Profile (getrennt von Identity) public DbSet UserProfiles => Set(); // Join-Entities (optional als DbSet, aber praktisch f�r Queries/Migrations) public DbSet DayPersons => Set(); public DbSet GamePersons => Set(); public DbSet ExpenseTriggers => Set(); public DbSet UserProfileClubs => Set(); public DbSet ClubInvitations => Set(); // Statistics public DbSet PlayerGameStatistics => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Optional: eigenes Schema f�r Domain-Tabellen modelBuilder.HasDefaultSchema("app"); // Deine IEntityTypeConfiguration<> Klassen automatisch anwenden modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly); } public override int SaveChanges() { ConvertDeletesToSoftDeletes(); return base.SaveChanges(); } public override Task SaveChangesAsync(CancellationToken cancellationToken = default) { ConvertDeletesToSoftDeletes(); return base.SaveChangesAsync(cancellationToken); } private void ConvertDeletesToSoftDeletes() { foreach (var entry in ChangeTracker.Entries()) { if (entry.State == EntityState.Deleted) { entry.State = EntityState.Modified; entry.Entity.IsDeleted = true; entry.Entity.ModifiedAt = DateTime.UtcNow; } } } }