| 123456789101112131415161718192021222324252627282930313233 |
- using Domain.Entities.Members;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.EntityFrameworkCore.Metadata.Builders;
- namespace Infrastructure.Persistence.Configurations.Members;
- public sealed class BroadcastSessionConfiguration : IEntityTypeConfiguration<BroadcastSession>
- {
- public void Configure(EntityTypeBuilder<BroadcastSession> 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<int>().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);
- }
- }
|