using Domain.Entities.Members; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Persistence.Configurations.Members; public sealed class BroadcastSessionConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(x => x.Channel).WithMany().HasForeignKey(x => x.ChannelID).OnDelete(DeleteBehavior.Cascade); builder.ToTable(nameof(BroadcastSession), x => x.HasComment("방송 세션 (라이브 1회 단위)")); builder.HasKey(x => x.ID); builder.Property(x => x.ID).ValueGeneratedOnAdd(); builder.Property(x => x.ChannelID).IsRequired().HasComment("채널 ID"); builder.Property(x => x.Platform).IsRequired().HasConversion().HasComment("플랫폼 (YouTube=1)"); builder.Property(x => x.VideoID).HasMaxLength(50).IsRequired().HasComment("플랫폼 비디오 ID"); builder.Property(x => x.Title).HasMaxLength(500).HasComment("방송 제목"); builder.Property(x => x.StartAt).HasComment("방송 시작 시각"); builder.Property(x => x.EndAt).HasComment("방송 종료 시각"); builder.Property(x => x.DurationSec).IsRequired().HasComment("방송 시간 (초)"); builder.Property(x => x.FinalViews).IsRequired().HasComment("최종 조회수"); builder.Property(x => x.FinalLikes).IsRequired().HasComment("최종 좋아요"); builder.Property(x => x.IsFinalized).IsRequired().HasComment("최종 확정 여부 (End + 24h 경과)"); builder.Property(x => x.UpdatedAt).HasComment("수정 일시"); builder.Property(x => x.CreatedAt).IsRequired().HasComment("생성 일시"); builder.HasIndex(x => new { x.Platform, x.VideoID }).IsUnique(); builder.HasIndex(x => new { x.ChannelID, x.EndAt }).IsDescending(false, true); builder.HasIndex(x => x.IsFinalized); } }