| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- using Domain.Entities.Donations.ValueObject;
- using Domain.Entities.Members;
- namespace Domain.Entities.Donations;
- /// <summary>
- /// 랭킹 스냅샷 — 매일 자정 00:00 배치로 생성
- /// </summary>
- public sealed class RankingSnapshot
- {
- [ForeignKey(nameof(MemberID))]
- public Member? Member { get; private set; }
- [Key]
- public int ID { get; private set; }
- public RankingType Type { get; private set; }
- public RankingPeriod Period { get; private set; }
- public DateTime PeriodStart { get; private set; }
- public DateTime PeriodEnd { get; private set; }
- public string? Category { get; private set; }
- public int MemberID { get; private set; }
- public int Rank { get; private set; }
- public int? PreviousRank { get; private set; }
- public long Score { get; private set; }
- public long MoneyAmount { get; private set; }
- public int DonorCount { get; private set; }
- public long BroadcastSec { get; private set; }
- public long ViewCount { get; private set; }
- public long LikeCount { get; private set; }
- public DateTime SnapshotAt { get; private set; } = DateTime.UtcNow;
- private RankingSnapshot() { }
- public static RankingSnapshot Create(
- RankingType type,
- RankingPeriod period,
- DateTime periodStart,
- DateTime periodEnd,
- string? category,
- int memberID,
- int rank,
- long score,
- long moneyAmount,
- int donorCount,
- long broadcastSec,
- long viewCount,
- long likeCount,
- int? previousRank
- ) {
- if (memberID <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(memberID));
- }
- if (rank <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(rank));
- }
- return new RankingSnapshot
- {
- Type = type,
- Period = period,
- PeriodStart = periodStart,
- PeriodEnd = periodEnd,
- Category = category,
- MemberID = memberID,
- Rank = rank,
- PreviousRank = previousRank,
- Score = score,
- MoneyAmount = moneyAmount,
- DonorCount = donorCount,
- BroadcastSec = broadcastSec,
- ViewCount = viewCount,
- LikeCount = likeCount,
- SnapshotAt = DateTime.UtcNow
- };
- }
- }
|