using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Nuuru.Server.Models; namespace Nuuru.Server.Data.EntityConfigurations { public class ReportConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { // Unique filtered index to prevent duplicate pending reports from the same user builder.HasIndex(r => new { r.TargetType, r.TargetId, r.ReporterId }) .HasFilter($"\"Status\" = {(int)ReportStatus.Pending}") .IsUnique(); // Cascade delete: when reporter is deleted, remove their filed reports builder.HasOne(r => r.Reporter) .WithMany() .HasForeignKey(r => r.ReporterId) .OnDelete(DeleteBehavior.Cascade); builder.HasOne(r => r.Moderator) .WithMany() .HasForeignKey(r => r.ModeratorId) .OnDelete(DeleteBehavior.SetNull); // Index for efficient queries builder.HasIndex(r => r.Status); builder.HasIndex(r => r.CreatedAt); } } }