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
};
}
}