using Domain.Entities.Chat; using Domain.Entities.Members; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Persistence.Configurations.Chat; public sealed class ChatBanConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne().WithMany().HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.Restrict); builder.ToTable(nameof(ChatBan), t => t.HasComment("채팅 제재 (RoomKey NULL=전체, ExpiresAt NULL=무기한)")); builder.HasKey(x => x.ID); builder.Property(x => x.ID).ValueGeneratedOnAdd().HasComment("PK"); builder.Property(x => x.MemberID).IsRequired().HasComment("제재 대상 회원 ID"); builder.Property(x => x.RoomKey).HasMaxLength(20).HasComment("제재 룸 키 (NULL=전체)"); builder.Property(x => x.Reason).HasMaxLength(200).IsRequired().HasComment("제재 사유"); builder.Property(x => x.CreatedBy).HasMaxLength(100).IsRequired().HasComment("제재 등록자"); builder.Property(x => x.CreatedAt).IsRequired(); builder.HasIndex(x => new { x.MemberID, x.ExpiresAt }); } }