namespace SharedKernel.Storage { public enum UploadTarget { Editor = 1, Upload } public enum UploadFolder { Basic = 1, // 기본 설정 EmailTemplate, // 알림 발송 양식 - 이메일 Document, // 문서 Faq, // 자주 묻는 질문 Popup, // 팝업 Banner, // 배너 MemberGrade, // 회원등급 MemberThumb, // 회원 사진 MemberIcon, // 회원 아이콘 Board, // 게시판 Post, // 게시글 Crypto // 코인/토큰 } // 추가 경로 값 public enum UploadAddition { // 기본 설정 BlockAlertContent = 1, MaintenanceContent, // 게시판 ListHeaderContent, // 게시판 목록 - 상단 내용 ListFooterContent, // 게시판 목록 - 하단 내용 PostWriteEmailNotifyContent , // 게시판 알림 양식 - 게시글 작성 시 내용 CommentWriteEmailNotifyContent, // 게시판 알림 양식 - 댓글 작성 시 내용 ReplyWriteEmailNotifyContent, // 게시판 알림 양식 - 답글 작성 시 내용 WriteHeaderContent, // 게시판 작성 - 상단 내용 WriteFooterContent, // 게시판 작성 - 하단 내용 WriteDefaultContent, // 게시판 작성 - 작성란 기본 내용 // 알림 발송 양식- 이메일 RegisterEmailFormContent, RegistrationEmailFormContent, ResetPasswordEmailFormContent, ChangedPasswordEmailFormContent, WithdrawEmailFormContent, 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.Board => "board", UploadFolder.Post => "post", UploadFolder.Crypto => "crypto", _ => 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))); } } }