using Domain.Entities.Forum.Constants; using Domain.Entities.Forum.ValueObject; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; namespace Domain.Entities.Forum.Boards { [Table(nameof(BoardMeta))] [Index(nameof(BoardID), IsUnique = true)] public class BoardMeta { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DisplayName("PK")] [Comment("PK")] public int ID { get; set; } [DisplayName("게시판 ID")] [Comment("게시판 ID")] [Required(ErrorMessage = "{0}는 필수입니다.")] public int BoardID { get; set; } // 목록 public BoardMetaList List { get; set; } = new BoardMetaList(); // 열람 public BoardMetaView View { get; set; } = new BoardMetaView(); // 작성 public BoardMetaWrite Write { get; set; } = new BoardMetaWrite(); // 댓글 public BoardMetaComment Comment { get; set; } = new BoardMetaComment(); // 일반 public BoardMetaGeneral General { get; set; } = new BoardMetaGeneral(); // 권한 public BoardMetaPermission Permission { get; set; } = new BoardMetaPermission(); // 알람 public BoardMetaNotify Notify { get; set; } = new BoardMetaNotify(); // 알람 양식 public BoardMetaNotifyTemplate NotifyTemplate { get; set; } = new BoardMetaNotifyTemplate(); // 경험치 public BoardMetaExp Exp { get; set; } = new BoardMetaExp(); } /// /// 게시판 목록 설정 /// [Owned] public class BoardMetaList { [DisplayName("상단 내용 출력 여부")] [Comment("상단 내용 출력 여부")] public bool ShowHeader { get; set; } = false; [DisplayName("상단 내용")] [Comment("상단 내용")] public string? HeaderContent { get; set; } = null; [DisplayName("하단 내용 출력 여부")] [Comment("하단 내용 출력 여부")] public bool ShowFooter { get; set; } = false; [DisplayName("하단 내용")] [Comment("하단 내용")] public string? FooterContent { get; set; } = null; [DisplayName("게시판 종류")] [Comment("게시판 종류")] public BoardLayout? Layout { get; set; } [DisplayName("기본 정렬")] [Comment("기본 정렬")] public BoardSort? Sort { get; set; } [DisplayName("목록 표시")] [Comment("목록 표시")] [Range(0, 100, ErrorMessage = "값은 0 ~ 100 사이를 입력합니다.")] public byte PerPage { get; set; } = 0; [DisplayName("글쓰기 버튼 보이기")] [Comment("글쓰기 버튼 보이기")] public bool AlwaysShowWriteButton { get; set; } = false; [DisplayName("하단 목록 보이기")] [Comment("하단 목록 보이기")] public bool ShowFooterListView { get; set; } = false; [DisplayName("NEW 사용 여부")] [Comment("NEW 사용 여부")] public bool IsNewIcon { get; set; } = false; [DisplayName("HOT 사용 여부")] [Comment("HOT 사용 여부")] public bool IsHotIcon { get; set; } = false; [DisplayName("공지사항 제외 여부")] [Comment("공지사항 제외 여부")] public bool ExceptNotice { get; set; } = false; [DisplayName("전체공지 제외 여부")] [Comment("전체공지 제외 여부")] public bool ExceptSpeaker { get; set; } = false; } /// /// 게시판 열람 설정 /// [Owned] public class BoardMetaView { [DisplayName("즐겨찾기 기능")] [Comment("즐겨찾기 기능")] public bool AllowBookmark { get; set; } = false; [DisplayName("공감 기능")] [Comment("공감 기능")] public bool AllowLike { get; set; } = false; [DisplayName("비공감 기능")] [Comment("비공감 기능")] public bool AllowDislike { get; set; } = false; [DisplayName("본문 인쇄 기능")] [Comment("본문 인쇄 기능")] public bool AllowPrint { get; set; } = false; [DisplayName("SNS 보내기 기능")] [Comment("SNS 보내기 기능")] public bool AllowSnsShare { get; set; } = false; [DisplayName("이전글, 다음글 버튼")] [Comment("이전글, 다음글 버튼")] public bool AllowPrevNextBotton { get; set; } = false; [DisplayName("신고 기능")] [Comment("신고 기능")] public bool AllowBlame { get; set; } = false; [DisplayName("신고 시 숨김")] [Comment("신고 시 숨김")] public ushort BlameHideCount { get; set; } = 0; [DisplayName("URL Link 새창")] [Comment("URL Link 새창")] public bool AllowContentLinkTargetBlank { get; set; } = false; [DisplayName("주소 복사 버튼")] [Comment("주소 복사 버튼")] public bool AllowPostUrlCopy { get; set; } = false; [DisplayName("글 주소 QR 코드")] [Comment("글 주소 QR 코드")] public bool AllowPostUrlQrCode { get; set; } = false; [DisplayName("회원 사진 공개")] [Comment("회원 사진 공개")] public bool ShowMemberPhoto { get; set; } = false; [DisplayName("회원 아이콘 공개")] [Comment("회원 아이콘 공개")] public bool ShowMemberIcon { get; set; } = false; [DisplayName("회원 가입일 공개")] [Comment("회원 가입일 공개")] public bool ShowMemberRegDate { get; set; } = false; [DisplayName("오늘의 한마디 공개")] [Comment("오늘의 한마디 공개")] public bool ShowMemberSummary { get; set; } = false; } /// /// 게시판 작성 설정 /// [Owned] public class BoardMetaWrite { [DisplayName("상단 내용 출력 여부")] [Comment("상단 내용 출력 여부")] public bool ShowHeader { get; set; } = false; [DisplayName("상단 내용")] [Comment("상단 내용")] public string? HeaderContent { get; set; } = null; [DisplayName("하단 내용 출력 여부")] [Comment("하단 내용 출력 여부")] public bool ShowFooter { get; set; } = false; [DisplayName("하단 내용")] [Comment("하단 내용")] public string? FooterContent { get; set; } = null; [DisplayName("기본 제목")] [Comment("기본 제목")] [StringLength(PostConstant.MaxAllowedSubjectLength, ErrorMessage = "{0}은(는) {1}자 이내로 입력해주세요.")] public string? DefaultSubject { get; set; } = null; [DisplayName("기본 내용")] [Comment("기본 내용")] [StringLength(PostConstant.MaxAllowedContentLength, ErrorMessage = "{0}은(는) {1}자 이내로 입력해주세요.")] public string? DefaultContent { get; set; } = null; [DisplayName("웹 에디터 사용")] [Comment("웹 에디터 사용")] public bool AllowEditor { get; set; } = false; [DisplayName("말머리 사용")] [Comment("말머리 사용")] public bool AllowPrefix { get; set; } = false; [DisplayName("말머리 필수 선택")] [Comment("말머리 필수 선택")] public bool RequiredPrefix { get; set; } = false; [DisplayName("비밀글 사용")] [Comment("비밀글 사용")] public bool AllowSecret { get; set; } = false; [DisplayName("태그 사용")] [Comment("태그 사용")] public bool AllowTag { get; set; } = false; [DisplayName("태그 개수 제한")] [Comment("태그 개수 제한")] [Range(0, PostConstant.MaxAllowedTags, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public byte TagLimit { get; set; } = PostConstant.MaxAllowedTags; [DisplayName("이미지 사용")] [Comment("이미지 사용")] public bool AllowImage { get; set; } = false; [DisplayName("이미지 개수 제한")] [Comment("이미지 개수 제한")] [Range(0, PostConstant.MaxAllowedImages, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public byte ImageUploadLimit { get; set; } = PostConstant.MaxAllowedImages; [DisplayName("이미지 용량 제한(KB)")] [Comment("이미지 용량 제한(KB)")] [Range(0, PostConstant.MaxAllowedImageSize, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public int ImageUploadMaxSize { get; set; } = PostConstant.MaxAllowedImageSize; [DisplayName("미디어 사용")] [Comment("미디어 사용")] public bool AllowMedia { get; set; } = false; [DisplayName("미디어 개수 제한")] [Comment("미디어 개수 제한")] [Range(0, PostConstant.MaxAllowedMedias, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public byte MediaUploadLimit { get; set; } = PostConstant.MaxAllowedMedias; [DisplayName("파일 사용")] [Comment("파일 사용")] public bool AllowFile { get; set; } = false; [DisplayName("파일 개수 제한")] [Comment("파일 개수 제한")] [Range(0, PostConstant.MaxAllowedFiles, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public byte FileUploadLimit { get; set; } = PostConstant.MaxAllowedFiles; [DisplayName("파일 용량 제한(KB)")] [Comment("파일 용량 제한(KB)")] [Range(0, PostConstant.MaxAllowedFileSize, ErrorMessage = "{0}은(는) {1} ~ {2} 사이여야 합니다.")] public int FileUploadMaxSize { get; set; } = PostConstant.MaxAllowedFileSize; [DisplayName("파일 허용 확장자")] [Comment("파일 허용 확장자")] [StringLength(200, ErrorMessage = "{0}은(는) {1}자 이내로 입력해주세요.")] public string? FileUploadExtension { get; set; } = null; } /// /// 게시판 일반 설정 /// [Owned] public class BoardMetaGeneral { [DisplayName("게시글 삭제 금지 기간")] [Comment("게시글 삭제 금지 기간")] [Range(0, 365, ErrorMessage = "{0}은(는) 0 ~ 365 사이를 입력합니다.")] public ushort DeleteProtectionDays { get; set; } = 0; [DisplayName("게시글 수정 금지 기간")] [Comment("게시글 수정 금지 기간")] [Range(0, 365, ErrorMessage = "{0}은(는) 0 ~ 365 사이를 입력합니다.")] public ushort UpdateProtectionDays { get; set; } = 0; [DisplayName("게시글 보호 기능 (삭제 시)")] [Comment("게시글 보호 기능 (삭제 시)")] public bool AllowDeleteProtection { get; set; } = false; [DisplayName("게시글 보호 기능 (수정 시)")] [Comment("게시글 보호 기능 (수정 시)")] public bool AllowUpdateProtection { get; set; } = false; [DisplayName("다운로드 기록")] [Comment("다운로드 기록")] public bool EnableFileDownLog { get; set; } = false; [DisplayName("링크 클릭 기록")] [Comment("링크 클릭 기록")] public bool EnableLinkClickLog { get; set; } = false; [DisplayName("게시글 변경 기록")] [Comment("게시글 변경 기록")] public bool EnablePostUpdateLog { get; set; } = false; } /// /// 게시판 권한 설정 /// [Owned] public class BoardMetaPermission { [DisplayName("게시판 접근")] [Comment("게시판 접근")] public short BoardAccess { get; set; } = (short)BoardPermission.Guest; [DisplayName("글 열람")] [Comment("글 열람")] public short PostView { get; set; } = (short)BoardPermission.Guest; [DisplayName("글 작성")] [Comment("글 작성")] public short PostWrite { get; set; } = (short)BoardPermission.Guest; [DisplayName("댓글 목록")] [Comment("댓글 목록")] public short CommentView { get; set; } = (short)BoardPermission.Guest; [DisplayName("댓글 작성")] [Comment("댓글 작성")] public short CommentWrite { get; set; } = (short)BoardPermission.Guest; [DisplayName("답글 작성")] [Comment("답글 작성")] public short ReplyWrite { get; set; } = (short)BoardPermission.Guest; [DisplayName("파일 업로드")] [Comment("파일 업로드")] public short FileUpload { get; set; } = (short)BoardPermission.Guest; [DisplayName("파일 다운로드")] [Comment("파일 다운로드")] public short FileDownload { get; set; } = (short)BoardPermission.Guest; } /// /// 게시판 알림 설정 /// [Owned] public class BoardMetaNotify { [DisplayName("게시글 작성 시")] [Comment("게시글 작성 시")] public byte? PostWriteNotify { get; set; } = null; [DisplayName("댓글 작성 시")] [Comment("댓글 작성 시")] public byte? CommentWriteNotify { get; set; } = null; [DisplayName("답글 작성 시")] [Comment("답글 작성 시")] public byte? ReplyWriteNotify { get; set; } = null; public BoardNotify PostWriteNotifyEnum => (BoardNotify)(PostWriteNotify ?? 0); public BoardNotify CommentWriteNotifyEnum => (BoardNotify)(CommentWriteNotify ?? 0); public BoardNotify ReplyWriteNotifyEnum => (BoardNotify)(ReplyWriteNotify ?? 0); } /// /// 게시판 경험치 설정 /// [Owned] public class BoardMetaExp { [DisplayName("경험치 기능")] [Comment("경험치 기능")] public bool EnableExp { get; set; } = false; [DisplayName("경험치 안내")] [Comment("경험치 안내")] public bool ShowExpGuide { get; set; } = false; /* * 경험치 지급량 조절 */ [DisplayName("게시글 작성")] [Comment("게시글 작성")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort PostWriteExp { get; set; } = 0; [DisplayName("댓글 작성")] [Comment("댓글 작성")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort CommentWriteExp { get; set; } = 0; [DisplayName("파일 업로드")] [Comment("파일 업로드")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort FileUploadExp { get; set; } = 0; [DisplayName("파일 다운로드")] [Comment("파일 다운로드")] [Range(-10000, 10000, ErrorMessage = "값은 -10,000 ~ 10,000 사이를 입력합니다.")] public short FileDownloadExp { get; set; } = 0; [DisplayName("게시글 읽기")] [Comment("게시글 읽기")] [Range(-10000, 10000, ErrorMessage = "값은 -10,000 ~ 10,000 사이를 입력합니다.")] public short OtherPostReadExp { get; set; } = 0; [DisplayName("게시글 좋아요")] [Comment("게시글 좋아요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherPostLikeExp { get; set; } = 0; [DisplayName("게시글 싫어요")] [Comment("게시글 싫어요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherPostDisLikeExp { get; set; } = 0; [DisplayName("댓글 좋아요")] [Comment("댓글 좋아요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherCommentLikeExp { get; set; } = 0; [DisplayName("댓글 싫어요")] [Comment("댓글 싫어요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherCommentDisLikeExp { get; set; } = 0; [DisplayName("내 게시글 읽힘")] [Comment("내 게시글 읽힘")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnPostReadExp { get; set; } = 0; [DisplayName("내 게시글 좋아요")] [Comment("내 게시글 좋아요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnPostLikeExp { get; set; } = 0; [DisplayName("내 게시글 싫어요")] [Comment("내 게시글 싫어요")] [Range(-10000, 10000, ErrorMessage = "값은 -10,000 ~ 10,000 사이를 입력합니다.")] public short OwnPostDisLikeExp { get; set; } = 0; [DisplayName("내 댓글 좋아요")] [Comment("내 댓글 좋아요")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnCommentLikeExp { get; set; } = 0; [DisplayName("내 댓글 싫어요")] [Comment("내 댓글 싫어요")] [Range(-10000, 10000, ErrorMessage = "값은 -10,000 ~ 10,000 사이를 입력합니다.")] public short OwnCommentDisLikeExp { get; set; } = 0; /* * 경험치 회수량 조절 (항상 음수 계산) */ [DisplayName("게시글 작성 취소")] [Comment("게시글 작성 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort PostWriteUndoExp { get; set; } = 0; [DisplayName("댓글 작성 취소")] [Comment("댓글 작성 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort CommentWriteUndoExp { get; set; } = 0; [DisplayName("파일 업로드 취소")] [Comment("파일 업로드 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort FileUploadUndoExp { get; set; } = 0; [DisplayName("게시글 읽기 취소")] [Comment("게시글 읽기 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherPostReadUndoExp { get; set; } = 0; [DisplayName("게시글 좋아요 취소")] [Comment("게시글 좋아요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherPostLikeUndoExp { get; set; } = 0; [DisplayName("게시글 싫어요 취소")] [Comment("게시글 싫어요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherPostDisLikeUndoExp { get; set; } = 0; [DisplayName("댓글 좋아요 취소")] [Comment("댓글 좋아요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherCommentLikeUndoExp { get; set; } = 0; [DisplayName("댓글 싫어요 취소")] [Comment("댓글 싫어요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OtherCommentDisLikeUndoExp { get; set; } = 0; [DisplayName("내 게시글 읽힘 취소")] [Comment("내 게시글 읽힘 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnPostReadUndoExp { get; set; } = 0; [DisplayName("내 게시글 좋아요 취소")] [Comment("내 게시글 좋아요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnPostLikeUndoExp { get; set; } = 0; [DisplayName("내 게시글 싫어요 취소")] [Comment("내 게시글 싫어요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnPostDisLikeUndoExp { get; set; } = 0; [DisplayName("내 댓글 좋아요 취소")] [Comment("내 댓글 좋아요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnCommentLikeUndoExp { get; set; } = 0; [DisplayName("내 댓글 싫어요 취소")] [Comment("내 댓글 싫어요 취소")] [Range(0, 10000, ErrorMessage = "값은 0 ~ 10,000 사이를 입력합니다.")] public ushort OwnCommentDisLikeUndoExp { get; set; } = 0; /* * 경험치 지급 기한 */ [DisplayName("게시글 작성 기한")] [Comment("게시글 작성 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort PostWriteExpWithinDays { get; set; } = 0; [DisplayName("댓글 작성 기한")] [Comment("댓글 작성 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort CommentWriteExpWithinDays { get; set; } = 0; [DisplayName("파일 업로드 기한")] [Comment("파일 업로드 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort FileUploadExpWithinDays { get; set; } = 0; [DisplayName("게시글 읽기 기한")] [Comment("게시글 읽기 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OtherPostReadExpWithinDays { get; set; } = 0; [DisplayName("게시글 좋아요 기한")] [Comment("게시글 좋아요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OtherPostLikeExpWithinDays { get; set; } = 0; [DisplayName("게시글 싫어요 기한")] [Comment("게시글 싫어요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OtherPostDisLikeExpWithinDays { get; set; } = 0; [DisplayName("댓글 좋아요 기한")] [Comment("댓글 좋아요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OtherCommentLikeExpWithinDays { get; set; } = 0; [DisplayName("댓글 싫어요 기한")] [Comment("댓글 싫어요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OtherCommentDisLikeExpWithinDays { get; set; } = 0; [DisplayName("내 게시글 읽힘 기한")] [Comment("내 게시글 읽힘 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OwnPostReadExpWithinDays { get; set; } = 0; [DisplayName("내 게시글 좋아요 기한")] [Comment("내 게시글 좋아요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OwnPostLikeExpWithinDays { get; set; } = 0; [DisplayName("내 게시글 싫어요 기한")] [Comment("내 게시글 싫어요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OwnPostDisLikeExpWithinDays { get; set; } = 0; [DisplayName("내 댓글 좋아요 기한")] [Comment("내 댓글 좋아요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OwnCommentLikeExpWithinDays { get; set; } = 0; [DisplayName("내 댓글 싫어요 기한")] [Comment("내 댓글 싫어요 기한")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public ushort OwnCommentDisLikeExpWithinDays { get; set; } = 0; } /// /// 게시판 알림 양식 /// [Owned] public class BoardMetaNotifyTemplate { [DisplayName("이메일 제목 - 게시글 작성 시")] [Comment("이메일 제목 - 게시글 작성 시")] public string? PostWriteEmailNotifySubject { get; set; } = null; [DisplayName("이메일 내용 - 게시글 작성 시")] [Comment("이메일 내용 - 게시글 작성 시")] public string? PostWriteEmailNotifyContent { get; set; } = null; [DisplayName("이메일 제목 - 댓글 작성 시")] [Comment("이메일 제목 - 댓글 작성 시")] public string? CommentWriteEmailNotifySubject { get; set; } = null; [DisplayName("이메일 내용 - 댓글 작성 시")] [Comment("이메일 내용 - 댓글 작성 시")] public string? CommentWriteEmailNotifyContent { get; set; } = null; [DisplayName("이메일 제목 - 답글 작성 시")] [Comment("이메일 제목 - 답글 작성 시")] public string? ReplyWriteEmailNotifySubject { get; set; } = null; [DisplayName("이메일 내용 - 답글 작성 시")] [Comment("이메일 내용 - 답글 작성 시")] public string? ReplyWriteEmailNotifyContent { get; set; } = null; } /// /// 게시판 댓글 설정 /// [Owned] public class BoardMetaComment { [DisplayName("댓글 사용")] [Comment("댓글 사용")] public bool EnableComment { get; set; } = false; [DisplayName("목록 표시")] [Comment("목록 표시")] [Range(0, 100, ErrorMessage = "값은 0 ~ 100 사이를 입력합니다.")] public ushort PerPage { get; set; } = 0; [DisplayName("댓글 공감 사용")] [Comment("댓글 공감 사용")] public bool AllowLike { get; set; } = false; [DisplayName("댓글 비공감 사용")] [Comment("댓글 비공감 사용")] public bool AllowDisLike { get; set; } = false; [DisplayName("회원 사진 공개")] [Comment("회원 사진 공개")] public bool ShowMemberPhoto { get; set; } = false; [DisplayName("회원 아이콘 공개")] [Comment("회원 아이콘 공개")] public bool ShowMemberIcon { get; set; } = false; [DisplayName("안내 문구")] [Comment("안내 문구")] [StringLength(1000)] public string? ContentPlaceholder { get; set; } = null; [DisplayName("최소 입력 글자")] [Comment("최소 입력 글자")] public ushort MinContentLength { get; set; } = 0; [DisplayName("최대 입력 글자")] [Comment("최대 입력 글자")] public ushort MaxContentLength { get; set; } = 0; [DisplayName("웹 에디터 사용")] [Comment("웹 에디터 사용")] public bool EnableEditor { get; set; } = false; [DisplayName("비밀글 사용")] [Comment("비밀글 사용")] public bool AllowSecret { get; set; } = false; [DisplayName("댓글 신고 시 숨김")] [Comment("댓글 신고 시 숨김")] public ushort BlameHideCount { get; set; } = 0; [DisplayName("댓글 삭제 금지 기간")] [Comment("댓글 삭제 금지 기간")] public ushort DeleteProtectionDays { get; set; } = 0; [DisplayName("댓글 수정 금지 기간")] [Comment("댓글 수정 금지 기간")] public ushort UpdateProtectionDays { get; set; } = 0; [DisplayName("댓글 보호 기능 (삭제 시)")] [Comment("댓글 보호 기능 (삭제 시)")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public bool AllowDeleteProtection { get; set; } = false; [DisplayName("댓글 보호 기능 (수정 시)")] [Comment("댓글 보호 기능 (수정 시)")] [Range(0, 365, ErrorMessage = "값은 0 ~ 365 사이를 입력합니다.")] public bool AllowUpdateProtection { get; set; } = false; [DisplayName("댓글 변경 기록")] [Comment("댓글 변경 기록")] public bool EnableCommentUpdateLog { get; set; } = false; } }