| 123456789101112131415161718192021222324252627282930313233343536 |
- using Domain.Entities.Donations;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.EntityFrameworkCore.Metadata.Builders;
- namespace Infrastructure.Persistence.Configurations.Donations;
- public sealed class RankingSnapshotConfiguration : IEntityTypeConfiguration<RankingSnapshot>
- {
- public void Configure(EntityTypeBuilder<RankingSnapshot> builder)
- {
- builder.HasOne(x => x.Member).WithMany().HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.NoAction);
- builder.ToTable(nameof(RankingSnapshot), x => x.HasComment("랭킹 스냅샷 (일 1회 집계)"));
- builder.HasKey(x => x.ID);
- builder.Property(x => x.ID).ValueGeneratedOnAdd();
- builder.Property(x => x.Type).IsRequired().HasConversion<int>().HasComment("랭킹 종류 (1=종합, 2=크리에이터, 3=후원자)");
- builder.Property(x => x.Period).IsRequired().HasConversion<int>().HasComment("기간 (1=오늘, 2=어제, 3=이번주, 4=이번달, 5=지난달, 6=전체)");
- builder.Property(x => x.PeriodStart).IsRequired().HasComment("기간 시작");
- builder.Property(x => x.PeriodEnd).IsRequired().HasComment("기간 종료");
- builder.Property(x => x.Category).HasMaxLength(30).HasComment("카테고리 (전체/게임/버츄얼/토크/음악/먹방)");
- builder.Property(x => x.MemberID).IsRequired().HasComment("회원 ID");
- builder.Property(x => x.Rank).IsRequired().HasComment("순위");
- builder.Property(x => x.PreviousRank).HasComment("전일 순위");
- builder.Property(x => x.Score).IsRequired().HasComment("종합 점수");
- builder.Property(x => x.MoneyAmount).IsRequired().HasComment("수령/후원 금액");
- builder.Property(x => x.DonorCount).IsRequired().HasComment("후원자 수");
- builder.Property(x => x.BroadcastSec).IsRequired().HasComment("방송 시간 (초)");
- builder.Property(x => x.ViewCount).IsRequired().HasComment("조회수");
- builder.Property(x => x.LikeCount).IsRequired().HasComment("좋아요");
- builder.Property(x => x.SnapshotAt).IsRequired().HasComment("스냅샷 일시");
- builder.HasIndex(x => new { x.Type, x.Period, x.Category, x.Rank });
- builder.HasIndex(x => new { x.Type, x.Period, x.Category, x.MemberID }).IsUnique();
- builder.HasIndex(x => x.SnapshotAt).IsDescending(true);
- }
- }
|