CrewInvitationConfiguration.cs 1.3 KB

12345678910111213141516171819202122232425262728
  1. using Domain.Entities.Donations;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Infrastructure.Persistence.Configurations.Donations;
  5. public class CrewInvitationConfiguration : IEntityTypeConfiguration<CrewInvitation>
  6. {
  7. public void Configure(EntityTypeBuilder<CrewInvitation> builder)
  8. {
  9. builder.ToTable(nameof(CrewInvitation), x => x.HasComment("크루원 초대 이력"));
  10. builder.HasKey(x => x.ID);
  11. builder.HasOne(x => x.Crew).WithMany().HasForeignKey(x => x.CrewID).OnDelete(DeleteBehavior.Cascade);
  12. builder.HasOne(x => x.TargetMember).WithMany().HasForeignKey(x => x.TargetMemberID).OnDelete(DeleteBehavior.NoAction);
  13. builder.HasOne(x => x.InvitedByMember).WithMany().HasForeignKey(x => x.InvitedByMemberID).OnDelete(DeleteBehavior.NoAction);
  14. // 동일 (crewID, targetMemberID, status) 빠른 lookup (중복 초대 방지)
  15. builder.HasIndex(x => new { x.CrewID, x.TargetMemberID, x.Status });
  16. // 만료 처리 background용 (status, expiresAt)
  17. builder.HasIndex(x => new { x.Status, x.ExpiresAt });
  18. builder.Property(x => x.Nickname).HasMaxLength(40).IsRequired();
  19. builder.Property(x => x.Role).HasMaxLength(50);
  20. builder.Property(x => x.Status).HasConversion<int>();
  21. }
  22. }