Post.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using Microsoft.EntityFrameworkCore;
  2. using System.ComponentModel;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.ComponentModel.DataAnnotations.Schema;
  5. using bitforum.Models.Account;
  6. namespace bitforum.Models.BBS
  7. {
  8. [Table("Post")]
  9. [Index(nameof(Subject), Name = "IX_Post_Subject")]
  10. [Index(nameof(SID), Name = "IX_Post_SID")]
  11. [Index(nameof(Email), Name = "IX_Post_Email")]
  12. [Index(nameof(Name), Name = "IX_Post_Name")]
  13. [Index(nameof(IsReply), Name = "IX_Post_IsReply")]
  14. [Index(nameof(IsSecret), Name = "IX_Post_IsSecret")]
  15. [Index(nameof(IsNotice), Name = "IX_Post_IsNotice")]
  16. [Index(nameof(IsSpeaker), Name = "IX_Post_IsSpeaker")]
  17. [Index(nameof(IsDeleted), Name = "IX_Post_IsDeleted")]
  18. [Index(nameof(Views), Name = "IX_Post_Views")]
  19. [Index(nameof(Likes), Name = "IX_Post_Likes")]
  20. [Index(nameof(Dislikes), Name = "IX_Post_Dislikes")]
  21. [Index(nameof(Comments), Name = "IX_Post_Comments")]
  22. [Index(nameof(Blames), Name = "IX_Post_Blames")]
  23. [Index(nameof(Files), Name = "IX_Post_Files")]
  24. [Index(nameof(Images), Name = "IX_Post_Images")]
  25. [Index(nameof(Videos), Name = "IX_Post_Videos")]
  26. [Index(nameof(Tags), Name = "IX_Post_Tags")]
  27. [Index(nameof(LastReplyUpdatedAt), Name = "IX_Post_LastReplyUpdatedAt")]
  28. [Index(nameof(LastCommentUpdatedAt), Name = "IX_Post_LastCommentUpdatedAt")]
  29. [Index(nameof(CreatedAt), Name = "IX_Post_CreatedAt")]
  30. public class Post
  31. {
  32. [ForeignKey("BoardID")]
  33. public virtual Board Board { get; set; } = null!;
  34. [ForeignKey("MemberID")]
  35. public virtual Member Member { get; set; } = null!;
  36. public virtual List<Comment> Comment { get; set; } = new List<Comment>();
  37. [Key]
  38. [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  39. [DisplayName("PK")]
  40. [Comment("PK")]
  41. public int ID { get; set; }
  42. [DisplayName("게시판 ID")]
  43. [Comment("게시판 ID")]
  44. public int BoardID { get; set; }
  45. [DisplayName("회원 ID")]
  46. [Comment("회원 ID")]
  47. public int? MemberID { get; set; } = null;
  48. [Required]
  49. [DisplayName("제목")]
  50. [Comment("제목")]
  51. [DataType(DataType.Text)]
  52. [StringLength(255)]
  53. public string Subject { get; set; } = null!;
  54. [Required]
  55. [DisplayName("내용")]
  56. [Comment("내용")]
  57. [DataType(DataType.Html)]
  58. public string Content { get; set; } = null!;
  59. [DisplayName("회원 SID")]
  60. [Comment("회원 SID")]
  61. [StringLength(20)]
  62. public string? SID { get; set; } = null;
  63. [DisplayName("회원 이메일")]
  64. [Comment("회원 이메일")]
  65. [StringLength(60)]
  66. public string? Email { get; set; } = null;
  67. [DisplayName("회원 이름")]
  68. [Comment("회원 이름")]
  69. [StringLength(20)]
  70. public string? Name { get; set; } = null;
  71. [DisplayName("게시글 비밀번호")]
  72. [Comment("게시글 비밀번호")]
  73. [StringLength(255)]
  74. public string? Password { get; set; } = null;
  75. [DisplayName("답변 여부")]
  76. [Comment("답변 여부")]
  77. public bool IsReply { get; set; } = false;
  78. [DisplayName("비밀글 여부")]
  79. [Comment("비밀글 여부")]
  80. public bool IsSecret { get; set; } = false;
  81. [DisplayName("일반 공지 여부")]
  82. [Comment("일반 공지 여부")]
  83. public bool IsNotice { get; set; } = false;
  84. [DisplayName("전체 공지 여부")]
  85. [Comment("전체 공지 여부")]
  86. public bool IsSpeaker { get; set; } = false;
  87. [DisplayName("삭제 여부")]
  88. [Comment("삭제 여부")]
  89. public bool IsDeleted { get; set; } = false;
  90. [DisplayName("조회 수")]
  91. [Comment("조회 수")]
  92. public uint Views { get; set; } = 0;
  93. [DisplayName("좋아요")]
  94. [Comment("좋아요")]
  95. public uint Likes { get; set; } = 0;
  96. [DisplayName("싫어요")]
  97. [Comment("싫어요")]
  98. public uint Dislikes { get; set; } = 0;
  99. [DisplayName("댓글 수")]
  100. [Comment("댓글 수")]
  101. public uint Comments { get; set; } = 0;
  102. [DisplayName("신고 수")]
  103. [Comment("신고 수")]
  104. public uint Blames { get; set; } = 0;
  105. [DisplayName("파일 수")]
  106. [Comment("파일 수")]
  107. public sbyte Files { get; set; } = 0;
  108. [DisplayName("이미지 수")]
  109. [Comment("이미지 수")]
  110. public sbyte Images { get; set; } = 0;
  111. [DisplayName("동영상 수")]
  112. [Comment("동영상 수")]
  113. public sbyte Videos { get; set; } = 0;
  114. [DisplayName("Tag 수")]
  115. [Comment("Tag 수")]
  116. public sbyte Tags { get; set; } = 0;
  117. [DisplayName("IP")]
  118. [Comment("IP")]
  119. [StringLength(50)]
  120. public string IpAddress { get; set; } = null!;
  121. [DisplayName("User-Agent")]
  122. [Comment("User-Agent")]
  123. [StringLength(255)]
  124. public string UserAgent { get; set; } = null!;
  125. [DisplayName("마지막 답변 일시")]
  126. [Comment("마지막 답변 일시")]
  127. [DataType(DataType.DateTime)]
  128. public DateTime? LastReplyUpdatedAt { get; set; } = null;
  129. [DisplayName("마지막 댓글 일시")]
  130. [Comment("마지막 댓글 일시")]
  131. [DataType(DataType.DateTime)]
  132. public DateTime? LastCommentUpdatedAt { get; set; } = null;
  133. [DisplayName("삭제 일시")]
  134. [Comment("삭제 일시")]
  135. [DataType(DataType.DateTime)]
  136. public DateTime? DeletedAt { get; set; } = null;
  137. [DisplayName("수정 일시")]
  138. [Comment("수정 일시")]
  139. [DataType(DataType.DateTime)]
  140. public DateTime? UpdatedAt { get; set; } = null;
  141. [DisplayName("등록 일시")]
  142. [Comment("등록 일시")]
  143. [DataType(DataType.DateTime)]
  144. public DateTime CreatedAt { get; set; }
  145. }
  146. }