DailyBriefing.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Domain.Entities.Forum.Posts;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.ComponentModel.DataAnnotations.Schema;
  4. namespace Domain.Entities.Forum.Briefings;
  5. /// <summary>
  6. /// 장전 브리핑 발행 기록 (d2 §③·§⑥ M3) — 매 영업일 07:30 KST DailyBriefingPublisher 가 전일 지수·등락상위·공시를
  7. /// 취합해 briefing 보드에 시스템 계정으로 Post 를 발행하고 이 행을 남긴다.
  8. /// BriefingDate 가 UNIQUE 이므로 같은 날 중복 발행을 방지한다(멱등). PostID 는 발행된 게시글을 가리킨다.
  9. /// </summary>
  10. public class DailyBriefing
  11. {
  12. [ForeignKey(nameof(PostID))]
  13. public virtual Post Post { get; private set; } = null!;
  14. [Key]
  15. public int ID { get; private set; }
  16. /// <summary>브리핑 대상 일자 (KST, UNIQUE) — 발행 실행일.</summary>
  17. public DateOnly BriefingDate { get; private set; }
  18. /// <summary>발행된 게시글 ID (FK Post).</summary>
  19. public int PostID { get; private set; }
  20. public DateTime GeneratedAt { get; private set; } = DateTime.UtcNow;
  21. private DailyBriefing() { }
  22. public static DailyBriefing Create(DateOnly briefingDate, int postID)
  23. {
  24. ArgumentOutOfRangeException.ThrowIfNegativeOrZero(postID);
  25. return new DailyBriefing
  26. {
  27. BriefingDate = briefingDate,
  28. PostID = postID
  29. };
  30. }
  31. }