using Domain.Entities.Forum.Posts; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Domain.Entities.Forum.Briefings; /// /// 장전 브리핑 발행 기록 (d2 §③·§⑥ M3) — 매 영업일 07:30 KST DailyBriefingPublisher 가 전일 지수·등락상위·공시를 /// 취합해 briefing 보드에 시스템 계정으로 Post 를 발행하고 이 행을 남긴다. /// BriefingDate 가 UNIQUE 이므로 같은 날 중복 발행을 방지한다(멱등). PostID 는 발행된 게시글을 가리킨다. /// public class DailyBriefing { [ForeignKey(nameof(PostID))] public virtual Post Post { get; private set; } = null!; [Key] public int ID { get; private set; } /// 브리핑 대상 일자 (KST, UNIQUE) — 발행 실행일. public DateOnly BriefingDate { get; private set; } /// 발행된 게시글 ID (FK Post). public int PostID { get; private set; } public DateTime GeneratedAt { get; private set; } = DateTime.UtcNow; private DailyBriefing() { } public static DailyBriefing Create(DateOnly briefingDate, int postID) { ArgumentOutOfRangeException.ThrowIfNegativeOrZero(postID); return new DailyBriefing { BriefingDate = briefingDate, PostID = postID }; } }