using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Domain.Entities.Members; namespace Domain.Entities.Donations; /// /// 후원자가 채널별로 선택한 대표 칭호 (채널당 1개). /// public sealed class DonorTitleSelection { [ForeignKey(nameof(DonorMemberID))] public Member Donor { get; private set; } = null!; [ForeignKey(nameof(ChannelID))] public Channel Channel { get; private set; } = null!; [ForeignKey(nameof(SelectedTitleID))] public ChannelTitle? SelectedTitle { get; private set; } [Key] public int ID { get; private set; } public int DonorMemberID { get; private set; } public int ChannelID { get; private set; } public int? SelectedTitleID { get; private set; } public DateTime? UpdatedAt { get; private set; } public DateTime CreatedAt { get; private set; } = DateTime.UtcNow; private DonorTitleSelection() { } private DonorTitleSelection(int donorMemberID, int channelID, int? selectedTitleID) { if (donorMemberID <= 0) { throw new ArgumentOutOfRangeException(nameof(donorMemberID)); } if (channelID <= 0) { throw new ArgumentOutOfRangeException(nameof(channelID)); } DonorMemberID = donorMemberID; ChannelID = channelID; SelectedTitleID = selectedTitleID; } public static DonorTitleSelection Create(int donorMemberID, int channelID, int? selectedTitleID) { return new(donorMemberID, channelID, selectedTitleID); } public void Update(int? selectedTitleID) { SelectedTitleID = selectedTitleID; UpdatedAt = DateTime.UtcNow; } }