using Domain.Entities.Forum.Constants; using Domain.Entities.Forum.ValueObject; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; namespace Domain.Entities.Forum.Boards { public class BoardMeta { [Key] public int ID { get; set; } 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 { public bool ShowHeader { get; set; } = false; public string? HeaderContent { get; set; } public bool ShowFooter { get; set; } = false; public string? FooterContent { get; set; } public BoardLayout? Layout { get; set; } public BoardSort? Sort { get; set; } public byte PerPage { get; set; } = 0; public bool AlwaysShowWriteButton { get; set; } = false; public bool ShowFooterListView { get; set; } = false; public bool IsNewIcon { get; set; } = false; public bool IsHotIcon { get; set; } = false; public bool ExceptNotice { get; set; } = false; public bool ExceptSpeaker { get; set; } = false; } /// /// 게시판 열람 설정 /// [Owned] public class BoardMetaView { public bool AllowBookmark { get; set; } = false; public bool AllowLike { get; set; } = false; public bool AllowDislike { get; set; } = false; public bool AllowPrint { get; set; } = false; public bool AllowSnsShare { get; set; } = false; public bool AllowPrevNextBotton { get; set; } = false; public bool AllowBlame { get; set; } = false; public ushort BlameHideCount { get; set; } = 0; public bool AllowContentLinkTargetBlank { get; set; } = false; public bool AllowPostUrlCopy { get; set; } = false; public bool AllowPostUrlQrCode { get; set; } = false; public bool ShowMemberThumb { get; set; } = false; public bool ShowMemberIcon { get; set; } = false; public bool ShowMemberRegDate { get; set; } = false; public bool ShowMemberSummary { get; set; } = false; } /// /// 게시판 작성 설정 /// [Owned] public class BoardMetaWrite { public bool ShowHeader { get; set; } = false; public string? HeaderContent { get; set; } public bool ShowFooter { get; set; } = false; public string? FooterContent { get; set; } public string? DefaultSubject { get; set; } public string? DefaultContent { get; set; } public bool AllowEditor { get; set; } = false; public bool AllowPrefix { get; set; } = false; public bool RequiredPrefix { get; set; } = false; public bool AllowSecret { get; set; } = false; public bool AllowTag { get; set; } = false; public byte TagLimit { get; set; } = PostConstant.MaxAllowedTags; public bool AllowImage { get; set; } = false; public byte ImageUploadLimit { get; set; } = PostConstant.MaxAllowedImages; public int ImageUploadMaxSize { get; set; } = PostConstant.MaxAllowedImageSize; public bool AllowMedia { get; set; } = false; public byte MediaUploadLimit { get; set; } = PostConstant.MaxAllowedMedias; public bool AllowFile { get; set; } = false; public byte FileUploadLimit { get; set; } = PostConstant.MaxAllowedFiles; public int FileUploadMaxSize { get; set; } = PostConstant.MaxAllowedFileSize; public string? FileUploadExtension { get; set; } } /// /// 게시판 일반 설정 /// [Owned] public class BoardMetaGeneral { public ushort DeleteProtectionDays { get; set; } = 0; public ushort UpdateProtectionDays { get; set; } = 0; public bool AllowDeleteProtection { get; set; } = false; public bool AllowUpdateProtection { get; set; } = false; public bool EnableFileDownLog { get; set; } = false; public bool EnableLinkClickLog { get; set; } = false; public bool EnablePostUpdateLog { get; set; } = false; } /// /// 게시판 권한 설정 /// [Owned] public class BoardMetaPermission { public short BoardAccess { get; set; } = (short)BoardPermission.Guest; public short PostView { get; set; } = (short)BoardPermission.Guest; public short PostWrite { get; set; } = (short)BoardPermission.Guest; public short CommentView { get; set; } = (short)BoardPermission.Guest; public short CommentWrite { get; set; } = (short)BoardPermission.Guest; public short ReplyWrite { get; set; } = (short)BoardPermission.Guest; public short FileUpload { get; set; } = (short)BoardPermission.Guest; public short FileDownload { get; set; } = (short)BoardPermission.Guest; } /// /// 게시판 알림 설정 /// [Owned] public class BoardMetaNotify { public byte? PostWriteNotify { get; set; } public byte? CommentWriteNotify { get; set; } public byte? ReplyWriteNotify { get; set; } public BoardNotify PostWriteNotifyEnum => (BoardNotify)(PostWriteNotify ?? 0); public BoardNotify CommentWriteNotifyEnum => (BoardNotify)(CommentWriteNotify ?? 0); public BoardNotify ReplyWriteNotifyEnum => (BoardNotify)(ReplyWriteNotify ?? 0); } /// /// 게시판 경험치 설정 /// [Owned] public class BoardMetaExp { public bool EnableExp { get; set; } = false; public bool ShowExpGuide { get; set; } = false; /* * 경험치 지급량 조절 */ public ushort PostWriteExp { get; set; } = 0; public ushort CommentWriteExp { get; set; } = 0; public ushort FileUploadExp { get; set; } = 0; public short FileDownloadExp { get; set; } = 0; public short OtherPostReadExp { get; set; } = 0; public ushort OtherPostLikeExp { get; set; } = 0; public ushort OtherPostDisLikeExp { get; set; } = 0; public ushort OtherCommentLikeExp { get; set; } = 0; public ushort OtherCommentDisLikeExp { get; set; } = 0; public ushort OwnPostReadExp { get; set; } = 0; public ushort OwnPostLikeExp { get; set; } = 0; public short OwnPostDisLikeExp { get; set; } = 0; public ushort OwnCommentLikeExp { get; set; } = 0; public short OwnCommentDisLikeExp { get; set; } = 0; /* * 경험치 회수량 조절 (항상 음수 계산) */ public ushort PostWriteUndoExp { get; set; } = 0; public ushort CommentWriteUndoExp { get; set; } = 0; public ushort FileUploadUndoExp { get; set; } = 0; public ushort OtherPostReadUndoExp { get; set; } = 0; public ushort OtherPostLikeUndoExp { get; set; } = 0; public ushort OtherPostDisLikeUndoExp { get; set; } = 0; public ushort OtherCommentLikeUndoExp { get; set; } = 0; public ushort OtherCommentDisLikeUndoExp { get; set; } = 0; public ushort OwnPostReadUndoExp { get; set; } = 0; public ushort OwnPostLikeUndoExp { get; set; } = 0; public ushort OwnPostDisLikeUndoExp { get; set; } = 0; public ushort OwnCommentLikeUndoExp { get; set; } = 0; public ushort OwnCommentDisLikeUndoExp { get; set; } = 0; /* * 경험치 지급 기한 */ public ushort PostWriteExpWithinDays { get; set; } = 0; public ushort CommentWriteExpWithinDays { get; set; } = 0; public ushort FileUploadExpWithinDays { get; set; } = 0; public ushort OtherPostReadExpWithinDays { get; set; } = 0; public ushort OtherPostLikeExpWithinDays { get; set; } = 0; public ushort OtherPostDisLikeExpWithinDays { get; set; } = 0; public ushort OtherCommentLikeExpWithinDays { get; set; } = 0; public ushort OtherCommentDisLikeExpWithinDays { get; set; } = 0; public ushort OwnPostReadExpWithinDays { get; set; } = 0; public ushort OwnPostLikeExpWithinDays { get; set; } = 0; public ushort OwnPostDisLikeExpWithinDays { get; set; } = 0; public ushort OwnCommentLikeExpWithinDays { get; set; } = 0; public ushort OwnCommentDisLikeExpWithinDays { get; set; } = 0; } /// /// 게시판 알림 양식 /// [Owned] public class BoardMetaNotifyTemplate { public string? PostWriteEmailNotifySubject { get; set; } public string? PostWriteEmailNotifyContent { get; set; } public string? CommentWriteEmailNotifySubject { get; set; } public string? CommentWriteEmailNotifyContent { get; set; } public string? ReplyWriteEmailNotifySubject { get; set; } public string? ReplyWriteEmailNotifyContent { get; set; } } /// /// 게시판 댓글 설정 /// [Owned] public class BoardMetaComment { public bool EnableComment { get; set; } = false; public ushort PerPage { get; set; } = 0; public bool AllowLike { get; set; } = false; public bool AllowDisLike { get; set; } = false; public bool ShowMemberThumb { get; set; } = false; public bool ShowMemberIcon { get; set; } = false; public string? ContentPlaceholder { get; set; } public ushort MinContentLength { get; set; } = 0; public ushort MaxContentLength { get; set; } = 0; public bool EnableEditor { get; set; } = false; public bool AllowSecret { get; set; } = false; public ushort BlameHideCount { get; set; } = 0; public ushort DeleteProtectionDays { get; set; } = 0; public ushort UpdateProtectionDays { get; set; } = 0; public bool AllowDeleteProtection { get; set; } = false; public bool AllowUpdateProtection { get; set; } = false; public bool EnableCommentUpdateLog { get; set; } = false; } }