BroadcastSessionConfiguration.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233
  1. using Domain.Entities.Members;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Infrastructure.Persistence.Configurations.Members;
  5. public sealed class BroadcastSessionConfiguration : IEntityTypeConfiguration<BroadcastSession>
  6. {
  7. public void Configure(EntityTypeBuilder<BroadcastSession> builder)
  8. {
  9. builder.HasOne(x => x.Channel).WithMany().HasForeignKey(x => x.ChannelID).OnDelete(DeleteBehavior.Cascade);
  10. builder.ToTable(nameof(BroadcastSession), x => x.HasComment("방송 세션 (라이브 1회 단위)"));
  11. builder.HasKey(x => x.ID);
  12. builder.Property(x => x.ID).ValueGeneratedOnAdd();
  13. builder.Property(x => x.ChannelID).IsRequired().HasComment("채널 ID");
  14. builder.Property(x => x.Platform).IsRequired().HasConversion<int>().HasComment("플랫폼 (YouTube=1)");
  15. builder.Property(x => x.VideoID).HasMaxLength(50).IsRequired().HasComment("플랫폼 비디오 ID");
  16. builder.Property(x => x.Title).HasMaxLength(500).HasComment("방송 제목");
  17. builder.Property(x => x.StartAt).HasComment("방송 시작 시각");
  18. builder.Property(x => x.EndAt).HasComment("방송 종료 시각");
  19. builder.Property(x => x.DurationSec).IsRequired().HasComment("방송 시간 (초)");
  20. builder.Property(x => x.FinalViews).IsRequired().HasComment("최종 조회수");
  21. builder.Property(x => x.FinalLikes).IsRequired().HasComment("최종 좋아요");
  22. builder.Property(x => x.IsFinalized).IsRequired().HasComment("최종 확정 여부 (End + 24h 경과)");
  23. builder.Property(x => x.UpdatedAt).HasComment("수정 일시");
  24. builder.Property(x => x.CreatedAt).IsRequired().HasComment("생성 일시");
  25. builder.HasIndex(x => new { x.Platform, x.VideoID }).IsUnique();
  26. builder.HasIndex(x => new { x.ChannelID, x.EndAt }).IsDescending(false, true);
  27. builder.HasIndex(x => x.IsFinalized);
  28. }
  29. }