Board.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System.ComponentModel;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.ComponentModel.DataAnnotations.Schema;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Domain.Entities.Forum.Boards
  6. {
  7. [Table(nameof(Board))]
  8. [Index(nameof(BoardGroupID))]
  9. [Index(nameof(Code), IsUnique = true)]
  10. [Index(nameof(Name))]
  11. [Index(nameof(Order))]
  12. [Index(nameof(IsSearch))]
  13. [Index(nameof(IsActive))]
  14. [Index(nameof(Posts))]
  15. [Index(nameof(Comments))]
  16. [Index(nameof(IsSearch), nameof(IsActive))]
  17. [Index(nameof(Code), nameof(IsSearch))]
  18. [Index(nameof(Code), nameof(IsActive))]
  19. [Index(nameof(Code), nameof(IsSearch))]
  20. public class Board
  21. {
  22. // 게시판
  23. [ForeignKey(nameof(BoardGroupID))]
  24. public virtual BoardGroup BoardGroup { get; set; } = null!;
  25. // 게시판 속성
  26. public virtual BoardMeta BoardMeta { get; set; } = null!;
  27. // 게시판 관리자
  28. public virtual List<BoardManager> BoardManager { get; set; } = [];
  29. // 말머리
  30. public virtual List<BoardPrefix> BoardPrefix { get; set; } = [];
  31. // 게시글
  32. public virtual List<Post> Post { get; set; } = [];
  33. [Key]
  34. [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  35. [DisplayName("PK")]
  36. [Comment("PK")]
  37. public int ID { get; set; }
  38. [DisplayName("분류 ID")]
  39. [Comment("분류 ID")]
  40. [Required(ErrorMessage = "{0}는 필수입니다.")]
  41. public int BoardGroupID { get; set; }
  42. [DisplayName("게시판 주소")]
  43. [Comment("게시판 주소")]
  44. [Required(ErrorMessage = "{0}는 필수입니다.")]
  45. [StringLength(30, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  46. public string Code { get; set; } = null!;
  47. [DisplayName("게시판 이름")]
  48. [Comment("게시판 이름")]
  49. [Required(ErrorMessage = "{0}는 필수입니다.")]
  50. [StringLength(70, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  51. public string Name { get; set; } = null!;
  52. [DisplayName("순서")]
  53. [Comment("순서")]
  54. [Required(ErrorMessage = "{0}는 필수입니다.")]
  55. [Range(short.MinValue, short.MaxValue, ErrorMessage = "{0}는 {2} ~ {1} 사이를 입력합니다.")]
  56. public short Order { get; set; } = 0;
  57. [DisplayName("검색 여부")]
  58. [Comment("검색 여부")]
  59. [Required(ErrorMessage = "{0}는 필수입니다.")]
  60. public bool IsSearch { get; set; } = false;
  61. [DisplayName("사용 여부")]
  62. [Comment("사용 여부")]
  63. [Required(ErrorMessage = "{0}는 필수입니다.")]
  64. public bool IsActive { get; set; } = false;
  65. [DisplayName("게시글 수")]
  66. [Comment("게시글 수")]
  67. [Range(0, int.MaxValue, ErrorMessage = "{0}은 {2} 이상, {1} 이하로 입력하세요.")]
  68. public int Posts { get; set; } = 0;
  69. [DisplayName("댓글 수")]
  70. [Comment("댓글 수")]
  71. [Range(0, int.MaxValue, ErrorMessage = "{0}은 {2} 이상, {1} 이하로 입력하세요.")]
  72. public int Comments { get; set; } = 0;
  73. [DisplayName("수정 일시")]
  74. [Comment("수정 일시")]
  75. [DataType(DataType.DateTime)]
  76. public DateTime? UpdatedAt { get; set; } = null;
  77. [DisplayName("등록 일시")]
  78. [Comment("등록 일시")]
  79. [DataType(DataType.DateTime)]
  80. public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
  81. }
  82. }