using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Domain.Entities.Members; /// /// 채널별 누적 방송 지표 (매일 자정 재계산) /// 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; } }