RssNewsArticle.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.News
  4. {
  5. public class RssNewsArticle
  6. {
  7. [ForeignKey(nameof(RssFeedSourceID))]
  8. public virtual RssFeedSource RssFeedSource { get; set; } = null!;
  9. [Key]
  10. public int ID { get; private set; }
  11. public int RssFeedSourceID { get; private set; }
  12. public string Title { get; private set; } = default!;
  13. public string? Link { get; private set; }
  14. public string? Guid { get; private set; }
  15. public string? Author { get; private set; }
  16. public string? Description { get; private set; }
  17. public string? Content { get; private set; }
  18. public string? ImageUrl { get; private set; }
  19. public string? SourceName { get; private set; }
  20. public string? Categories { get; private set; }
  21. public int CommentCount { get; private set; } = 0;
  22. public DateTime? PublishedAt { get; private set; }
  23. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  24. private RssNewsArticle() { }
  25. private RssNewsArticle(
  26. int rssFeedSourceID,
  27. string title,
  28. string? link,
  29. string? guid,
  30. string? author,
  31. string? description,
  32. string? content,
  33. string? imageUrl,
  34. string? sourceName,
  35. string? categories,
  36. int commentCount,
  37. DateTime? publishedAt
  38. ) {
  39. if (string.IsNullOrWhiteSpace(title))
  40. {
  41. throw new ArgumentException("Title is required.", nameof(title));
  42. }
  43. if (title.Length > 500)
  44. {
  45. title = title[..500];
  46. }
  47. RssFeedSourceID = rssFeedSourceID;
  48. Title = title;
  49. Link = link;
  50. Guid = guid;
  51. Author = author;
  52. Description = description;
  53. Content = content;
  54. ImageUrl = imageUrl;
  55. SourceName = sourceName;
  56. Categories = categories;
  57. CommentCount = commentCount;
  58. PublishedAt = publishedAt;
  59. }
  60. public static RssNewsArticle Create(
  61. int rssFeedSourceID,
  62. string title,
  63. string? link = null,
  64. string? guid = null,
  65. string? author = null,
  66. string? description = null,
  67. string? content = null,
  68. string? imageUrl = null,
  69. string? sourceName = null,
  70. string? categories = null,
  71. int commentCount = 0,
  72. DateTime? publishedAt = null
  73. ) => new(rssFeedSourceID, title, link, guid, author, description, content, imageUrl, sourceName, categories, commentCount, publishedAt);
  74. }
  75. }