using Koogle.Domain.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Koogle.Infrastructure.Data.Configurations; public class ExpenseTriggerConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("ExpenseTriggers"); // Eine aktive Zuordnung pro Club/Expense/Trigger builder.HasKey(x => new { x.ClubId, x.ExpenseId, x.TriggerId }); builder.Property(x => x.AssignedAt) .IsRequired() .HasDefaultValueSql("SYSUTCDATETIME()"); builder.Property(x => x.AssignedById) .IsRequired(); builder.HasOne(x => x.Club) .WithMany() .HasForeignKey(x => x.ClubId) .OnDelete(DeleteBehavior.Cascade); // WICHTIG: Club-Konsistenz erzwingen: // (ExpenseId, ClubId) muss in Expense (Id, ClubId) existieren builder.HasOne(x => x.Expense) .WithMany() .HasForeignKey(x => new { x.ExpenseId, x.ClubId }) .HasPrincipalKey(e => new { e.Id, e.ClubId }) .OnDelete(DeleteBehavior.Cascade); builder.HasOne(x => x.Trigger) .WithMany() .HasForeignKey(x => x.TriggerId) .OnDelete(DeleteBehavior.Cascade); builder.HasIndex(x => x.ExpenseId); builder.HasIndex(x => x.TriggerId); builder.HasIndex(x => x.ClubId); } }