namespace SharedKernel.Storage; public enum UploadTarget { Editor = 1, Upload } public enum UploadFolder { Basic = 1, // 기본 설정 EmailTemplate, // 알림 발송 양식 - 이메일 Document, // 문서 Faq, // 자주 묻는 질문 Popup, // 팝업 Banner, // 배너 MemberGrade, // 회원등급 MemberThumb, // 회원 사진 MemberIcon, // 회원 아이콘 MemberBanner, // 회원 배너 Board, // 게시판 Post, // 게시글 Comment, // 댓글 Crypto, // 코인/토큰 DonationAlert, // [비활성] 후원 도메인 제거됨(2026-07-03), 기존 업로드 파일 경로 호환용 유지 Feed, // 피드 포스트 이미지 ChannelTitle, // 채널 칭호 아이콘 StoreGame, // 상점 게임 썸네일 StoreProduct, // 상점 상품 썸네일 StoreGameDetail // 상점 게임 상세 이미지 갤러리 } // 추가 경로 값 public enum UploadAddition { // 기본 설정 BlockAlertContent = 1, MaintenanceContent, // 게시판 ListHeaderContent, // 게시판 목록 - 상단 내용 ListFooterContent, // 게시판 목록 - 하단 내용 PostWriteEmailNotifyContent , // 게시판 알림 양식 - 게시글 작성 시 내용 CommentWriteEmailNotifyContent, // 게시판 알림 양식 - 댓글 작성 시 내용 ReplyWriteEmailNotifyContent, // 게시판 알림 양식 - 답글 작성 시 내용 WriteHeaderContent, // 게시판 작성 - 상단 내용 WriteFooterContent, // 게시판 작성 - 하단 내용 WriteDefaultContent, // 게시판 작성 - 작성란 기본 내용 // 알림 발송 양식- 이메일 RegisterEmailFormContent, RegistrationEmailFormContent, ResetPasswordEmailFormContent, ChangedPasswordEmailFormContent, WithdrawEmailFormContent, WithdrawVerifyEmailFormContent, EmailVerifyFormContent, ChangedEmailFormContent } public readonly record struct FileStoragePath(UploadTarget Target, UploadFolder Folder, int? ID = null, UploadAddition? Addition = null) { public string ToRelativePath() { string t = Target switch { UploadTarget.Editor => "editors", UploadTarget.Upload => "uploads", _ => throw new ArgumentNullException(nameof(Target)) }; string f = Folder switch { UploadFolder.Basic => "basic", UploadFolder.EmailTemplate => "template/email", UploadFolder.Document => "document", UploadFolder.Faq => "faq", UploadFolder.Popup => "popup", UploadFolder.Banner => "banner", UploadFolder.MemberGrade => "member/grade", UploadFolder.MemberThumb => "member/thumb", UploadFolder.MemberIcon => "member/icon", UploadFolder.MemberBanner => "member/banner", UploadFolder.Board => "board", UploadFolder.Post => "post", UploadFolder.Comment => "comment", UploadFolder.Crypto => "crypto", UploadFolder.DonationAlert => "donation/alert", UploadFolder.Feed => "feed", UploadFolder.ChannelTitle => "channel/title", UploadFolder.StoreGame => "store/game", UploadFolder.StoreProduct => "store/product", UploadFolder.StoreGameDetail => "store/game/detail", _ => string.Empty }; var a = Addition.HasValue ? ((int)Addition.Value).ToString() : string.Empty; return string.Join('/', new[] { t, f, ID.ToString(), a }.Where(x => !string.IsNullOrWhiteSpace(x))); } }