Item.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Page.Banner;
  4. public class BannerItem
  5. {
  6. [ForeignKey(nameof(PositionID))]
  7. public virtual BannerPosition BannerPosition { get; private set; } = null!;
  8. [Key]
  9. public int ID { get; private set; }
  10. public int PositionID { get; private set; }
  11. public string Subject { get; private set; } = default!;
  12. public string? DesktopImage { get; private set; }
  13. public string? MobileImage { get; private set; }
  14. public string? Link { get; private set; }
  15. public string LinkTarget { get; private set; } = "_self";
  16. public short Order { get; private set; } = 0;
  17. public bool IsActive { get; private set; } = false;
  18. public DateTime? StartAt { get; private set; }
  19. public DateTime? EndAt { get; private set; }
  20. public DateTime? UpdatedAt { get; private set; }
  21. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  22. private BannerItem() { }
  23. private BannerItem(
  24. int positionID,
  25. string subject,
  26. string? desktopImage,
  27. string? mobileImage,
  28. string? link,
  29. string linkTarget,
  30. short order,
  31. bool isActive,
  32. DateTime? startAt,
  33. DateTime? endAt
  34. ) {
  35. if (positionID <= 0)
  36. {
  37. throw new ArgumentOutOfRangeException(nameof(positionID));
  38. }
  39. if (string.IsNullOrWhiteSpace(subject))
  40. {
  41. throw new ArgumentException("Subject is required.", nameof(subject));
  42. }
  43. if (subject.Length > 255)
  44. {
  45. throw new ArgumentOutOfRangeException(nameof(subject));
  46. }
  47. if (order < 0)
  48. {
  49. throw new ArgumentOutOfRangeException(nameof(order));
  50. }
  51. if (linkTarget != "_self" && linkTarget != "_blank")
  52. {
  53. throw new ArgumentOutOfRangeException(nameof(linkTarget), "LinkTarget must be '_self' or '_blank'.");
  54. }
  55. PositionID = positionID;
  56. Subject = subject;
  57. DesktopImage = desktopImage;
  58. MobileImage = mobileImage;
  59. Link = link;
  60. LinkTarget = linkTarget;
  61. Order = order;
  62. IsActive = isActive;
  63. StartAt = startAt;
  64. EndAt = endAt;
  65. }
  66. public static BannerItem Create(
  67. int positionID,
  68. string subject,
  69. string? desktopImage = null,
  70. string? mobileImage = null,
  71. string? link = null,
  72. string linkTarget = "_self",
  73. short order = 0,
  74. bool isActive = false,
  75. DateTime? startAt = null,
  76. DateTime? endAt = null
  77. ) => new(positionID, subject, desktopImage, mobileImage, link, linkTarget, order, isActive, startAt, endAt);
  78. public void Update(
  79. string subject,
  80. string? desktopImage,
  81. string? mobileImage,
  82. string? link,
  83. string linkTarget,
  84. short order,
  85. bool isActive,
  86. DateTime? startAt,
  87. DateTime? endAt
  88. ) {
  89. if (string.IsNullOrWhiteSpace(subject))
  90. {
  91. throw new ArgumentException("Subject is required.", nameof(subject));
  92. }
  93. if (subject.Length > 255)
  94. {
  95. throw new ArgumentOutOfRangeException(nameof(subject));
  96. }
  97. if (order < 0)
  98. {
  99. throw new ArgumentOutOfRangeException(nameof(order));
  100. }
  101. if (linkTarget != "_self" && linkTarget != "_blank")
  102. {
  103. throw new ArgumentOutOfRangeException(nameof(linkTarget), "LinkTarget must be '_self' or '_blank'.");
  104. }
  105. Subject = subject;
  106. DesktopImage = desktopImage;
  107. MobileImage = mobileImage;
  108. Link = link;
  109. LinkTarget = linkTarget;
  110. Order = order;
  111. IsActive = isActive;
  112. StartAt = startAt;
  113. EndAt = endAt;
  114. UpdatedAt = DateTime.UtcNow;
  115. }
  116. public void SetDesktopImage(string? desktopImage)
  117. {
  118. DesktopImage = desktopImage;
  119. UpdatedAt = DateTime.UtcNow;
  120. }
  121. public void SetMobileImage(string? mobileImage)
  122. {
  123. MobileImage = mobileImage;
  124. UpdatedAt = DateTime.UtcNow;
  125. }
  126. }