ChannelHandleHistory.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Members;
  4. /// <summary>
  5. /// 채널 핸들 변경 이력 — 이전 핸들로 접속 시 현재 핸들로 리다이렉트 하기 위한 테이블
  6. /// </summary>
  7. public sealed class ChannelHandleHistory
  8. {
  9. [ForeignKey(nameof(ChannelID))]
  10. public Channel Channel { get; private set; } = null!;
  11. [Key]
  12. public int ID { get; private set; }
  13. public int ChannelID { get; private set; }
  14. public string OldHandle { get; private set; } = default!;
  15. public DateTime ChangedAt { get; private set; } = DateTime.UtcNow;
  16. private ChannelHandleHistory() { }
  17. private ChannelHandleHistory(int channelID, string oldHandle)
  18. {
  19. if (channelID <= 0)
  20. {
  21. throw new ArgumentOutOfRangeException(nameof(channelID));
  22. }
  23. if (string.IsNullOrWhiteSpace(oldHandle))
  24. {
  25. throw new ArgumentException("OldHandle is required.", nameof(oldHandle));
  26. }
  27. if (oldHandle.Length > 30)
  28. {
  29. throw new ArgumentOutOfRangeException(nameof(oldHandle));
  30. }
  31. ChannelID = channelID;
  32. OldHandle = oldHandle;
  33. ChangedAt = DateTime.UtcNow;
  34. }
  35. public static ChannelHandleHistory Create(int channelID, string oldHandle)
  36. {
  37. return new(channelID, oldHandle);
  38. }
  39. }