Item.cs 3.9 KB

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