| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- namespace Domain.Entities.Members;
- /// <summary>
- /// 채널별 누적 방송 지표 (매일 자정 재계산)
- /// </summary>
- public sealed class ChannelBroadcastStats
- {
- [ForeignKey(nameof(ChannelID))]
- public Channel Channel { get; private set; } = null!;
- [Key]
- public int ChannelID { get; private set; }
- public long TotalDurationSec { get; private set; }
- public long CumulativeViews { get; private set; }
- public long TotalLikes { get; private set; }
- public int SessionCount { get; private set; }
- public DateTime? LastBroadcastAt { get; private set; }
- public DateTime? LastAggregatedAt { get; private set; }
- public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
- private ChannelBroadcastStats() { }
- private ChannelBroadcastStats(int channelID)
- {
- if (channelID <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(channelID));
- }
- ChannelID = channelID;
- }
- public static ChannelBroadcastStats Create(int channelID)
- {
- return new(channelID);
- }
- public void Update(long totalDurationSec, long cumulativeViews, long totalLikes, int sessionCount, DateTime? lastBroadcastAt)
- {
- TotalDurationSec = totalDurationSec;
- CumulativeViews = cumulativeViews;
- TotalLikes = totalLikes;
- SessionCount = sessionCount;
- LastBroadcastAt = lastBroadcastAt;
- LastAggregatedAt = DateTime.UtcNow;
- }
- }
|