Response.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. using Microsoft.AspNetCore.Http;
  2. using System.ComponentModel;
  3. namespace Application.Features.Config.Get;
  4. public sealed class Response
  5. {
  6. public int ID { get; init; }
  7. public BasicConfigDto Basic { get; init; } = new();
  8. public ImagesConfigDto Images { get; init; } = new();
  9. public MetaConfigDto Meta { get; init; } = new();
  10. public CompanyConfigDto Company { get; init; } = new();
  11. public AccountConfigDto Account { get; init; } = new();
  12. public EmailTemplateConfigDto EmailTemplate { get; init; } = new();
  13. public ExternalApiConfigDto External { get; init; } = new();
  14. public PaymentConfigDto Payment { get; init; } = new();
  15. public AttendanceConfigDto Attendance { get; init; } = new();
  16. public sealed class BasicConfigDto
  17. {
  18. [DisplayName("사이트 이름")]
  19. public string? SiteName { get; init; }
  20. [DisplayName("사이트 주소")]
  21. public string? SiteURL { get; init; }
  22. [DisplayName("최고 관리자 ID")]
  23. public string? RootID { get; init; }
  24. [DisplayName("송수신 이메일")]
  25. public string? FromEmail { get; init; }
  26. [DisplayName("송수신자 이름")]
  27. public string? FromName { get; init; }
  28. [DisplayName("SMTP Server")]
  29. public string? SmtpServer { get; init; }
  30. [DisplayName("SMTP Port")]
  31. public int? SmtpPort { get; set; }
  32. [DisplayName("SMTP Enable SSL")]
  33. public bool SmtpEnableSSL { get; init; } = false;
  34. [DisplayName("SMTP Username")]
  35. public string? SmtpUsername { get; init; }
  36. [DisplayName("SMTP Password")]
  37. public string? SmtpPassword { get; init; }
  38. [DisplayName("관리자단 접근 가능 IP")]
  39. public string? AdminWhiteIPList { get; init; }
  40. [DisplayName("사용자단 접근 가능 IP")]
  41. public string? FrontWhiteIPList { get; init; }
  42. [DisplayName("차단 시 안내문 제목")]
  43. public string? BlockAlertTitle { get; init; }
  44. [DisplayName("차단 시 안내문 내용")]
  45. public string? BlockAlertContent { get; init; }
  46. [DisplayName("점검 여부")]
  47. public bool IsMaintenance { get; init; } = false;
  48. [DisplayName("점검 내용")]
  49. public string? MaintenanceContent { get; init; }
  50. [DisplayName("쪽지 일일 발송 제한")]
  51. public int NoteDailySendLimit { get; init; } = 3;
  52. }
  53. public sealed class ImagesConfigDto
  54. {
  55. // ====== DB의 저장/표시용 경로(문자열) ======
  56. [DisplayName("Favicon")]
  57. public string? FaviconPath { get; init; }
  58. [DisplayName("Logo-square")]
  59. public string? LogoSquarePath { get; init; }
  60. [DisplayName("Logo-horizontal")]
  61. public string? LogoHorizontalPath { get; init; }
  62. [DisplayName("og-default")]
  63. public string? OgDefaultPath { get; init; }
  64. [DisplayName("Twitter-image")]
  65. public string? TwitterImagePath { get; init; }
  66. [DisplayName("Apple-touch-icon")]
  67. public string? AppleTouchIconPath { get; init; }
  68. [DisplayName("App-icon-192")]
  69. public string? AppIcon192Path { get; init; }
  70. [DisplayName("App-icon-512")]
  71. public string? AppIcon512Path { get; init; }
  72. // ====== 파일업로드 입력(새 업로드용) ======
  73. [DisplayName("Favicon 업로드")]
  74. public IFormFile? FaviconFile { get; init; }
  75. [DisplayName("Logo-square 업로드")]
  76. public IFormFile? LogoSquareFile { get; init; }
  77. [DisplayName("Logo-horizontal 업로드")]
  78. public IFormFile? LogoHorizontalFile { get; init; }
  79. [DisplayName("og-default 업로드")]
  80. public IFormFile? OgDefaultFile { get; init; }
  81. [DisplayName("Twitter-image 업로드")]
  82. public IFormFile? TwitterImageFile { get; init; }
  83. [DisplayName("Apple-touch-icon 업로드")]
  84. public IFormFile? AppleTouchIconFile { get; init; }
  85. [DisplayName("App-icon-192 업로드")]
  86. public IFormFile? AppIcon192File { get; init; }
  87. [DisplayName("App-icon-512 업로드")]
  88. public IFormFile? AppIcon512File { get; init; }
  89. }
  90. public sealed class MetaConfigDto
  91. {
  92. [DisplayName("Meta Keywords")]
  93. public string? Keywords { get; init; }
  94. [DisplayName("Meta Description")]
  95. public string? Description { get; init; }
  96. [DisplayName("Meta Author")]
  97. public string? Author { get; init; }
  98. [DisplayName("Meta Viewport")]
  99. public string? Viewport { get; init; }
  100. [DisplayName("Meta ApplicationName")]
  101. public string? ApplicationName { get; init; }
  102. [DisplayName("Meta Generator")]
  103. public string? Generator { get; init; }
  104. [DisplayName("Meta Robots")]
  105. public string? Robots { get; init; }
  106. [DisplayName("Meta Adds")]
  107. public string? Adds { get; init; }
  108. }
  109. public sealed class CompanyConfigDto
  110. {
  111. [DisplayName("상호 명")]
  112. public string? Name { get; init; }
  113. [DisplayName("사업자 등록 번호")]
  114. public string? RegNo { get; init; }
  115. [DisplayName("사업장 소재지")]
  116. public string? Address { get; init; }
  117. [DisplayName("우편번호")]
  118. public string? ZipCode { get; init; }
  119. [DisplayName("대표자 명")]
  120. public string? Owner { get; init; }
  121. [DisplayName("대표 전화번호")]
  122. public string? Tel { get; init; }
  123. [DisplayName("FAX")]
  124. public string? Fax { get; init; }
  125. [DisplayName("통신판매업 신고번호")]
  126. public string? RetailSaleNo { get; init; }
  127. [DisplayName("부가통신 사업자번호")]
  128. public string? AddedSaleNo { get; init; }
  129. [DisplayName("호스팅 서비스")]
  130. public string? Hosting { get; init; }
  131. [DisplayName("정보관리책임자")]
  132. public string? AdminName { get; init; }
  133. [DisplayName("정보관리책임자 이메일")]
  134. public string? AdminEmail { get; init; }
  135. [DisplayName("사이트 주소")]
  136. public string? SiteUrl { get; init; }
  137. [DisplayName("입금계좌 - 은행")]
  138. public string? BankCode { get; init; }
  139. [DisplayName("입금계좌 - 예금주")]
  140. public string? BankOwner { get; init; }
  141. [DisplayName("입금계좌 - 계좌번호")]
  142. public string? BankNumber { get; init; }
  143. }
  144. public sealed class AccountConfigDto
  145. {
  146. [DisplayName("회원가입 시 - 차단 여부")]
  147. public bool IsRegisterBlock { get; init; }
  148. [DisplayName("회원가입 시 - 이메일 인증 여부")]
  149. public bool IsRegisterEmailAuth { get; init; }
  150. [DisplayName("회원가입 시 - 비밀번호 최소 길이")]
  151. public ushort? PasswordMinLength { get; init; }
  152. [DisplayName("회원가입 시 - 비밀번호 대문자 최소 수")]
  153. public ushort? PasswordUppercaseLength { get; init; }
  154. [DisplayName("회원가입 시 - 비밀번호 숫자 최소 수")]
  155. public ushort? PasswordNumbersLength { get; init; }
  156. [DisplayName("회원가입 시 - 비밀번호 특수문자 최소 수")]
  157. public ushort? PasswordSpecialcharsLength { get; init; }
  158. [DisplayName("회원가입 시 - 금지 이메일")]
  159. public string? DeniedEmailList { get; init; }
  160. [DisplayName("회원가입 시 - 금지 별명")]
  161. public string? DeniedNameList { get; init; }
  162. [DisplayName("회원가입 시 - 이메일 변경 주기")]
  163. public ushort? ChangeEmailDay { get; init; }
  164. [DisplayName("회원가입 시 - 별명 변경 주기")]
  165. public ushort? ChangeNameDay { get; init; }
  166. [DisplayName("회원가입 시 - 한마디 변경 주기")]
  167. public ushort? ChangeSummaryDay { get; init; }
  168. [DisplayName("회원가입 시 - 자기소개 변경 주기")]
  169. public ushort? ChangeIntroDay { get; init; }
  170. [DisplayName("회원가입 시 - 비밀번호 변경 주기")]
  171. public ushort? ChangePasswordDay { get; init; }
  172. [DisplayName("로그인 시 - 이메일 인증 필요")]
  173. public bool IsLoginEmailVerifiedOnly { get; init; }
  174. [DisplayName("로그인 시 - 로그인 시도(회)")]
  175. public ushort? MaxLoginTryCount { get; init; }
  176. [DisplayName("로그인 시 - 로그인 제한(초)")]
  177. public ushort? MaxLoginTryLimitSecond { get; init; }
  178. }
  179. public sealed class EmailTemplateConfigDto
  180. {
  181. [DisplayName("회원가입 시 - 제목")]
  182. public string? RegisterEmailFormTitle { get; init; }
  183. [DisplayName("회원가입 시 - 내용")]
  184. public string? RegisterEmailFormContent { get; init; }
  185. [DisplayName("회원가입 완료 - 제목")]
  186. public string? RegistrationEmailFormTitle { get; init; }
  187. [DisplayName("회원가입 완료 - 내용")]
  188. public string? RegistrationEmailFormContent { get; init; }
  189. [DisplayName("비밀번호 재설정 - 제목")]
  190. public string? ResetPasswordEmailFormTitle { get; init; }
  191. [DisplayName("비밀번호 재설정 - 내용")]
  192. public string? ResetPasswordEmailFormContent { get; init; }
  193. [DisplayName("비밀번호 변경 완료 - 제목")]
  194. public string? ChangedPasswordEmailFormTitle { get; init; }
  195. [DisplayName("비밀번호 변경 완료 - 내용")]
  196. public string? ChangedPasswordEmailFormContent { get; init; }
  197. [DisplayName("회원탈퇴 시 - 제목")]
  198. public string? WithdrawEmailFormTitle { get; init; }
  199. [DisplayName("회원탈퇴 시 - 내용")]
  200. public string? WithdrawEmailFormContent { get; init; }
  201. [DisplayName("회원탈퇴 인증 - 제목")]
  202. public string? WithdrawVerifyEmailFormTitle { get; init; }
  203. [DisplayName("회원탈퇴 인증 - 내용")]
  204. public string? WithdrawVerifyEmailFormContent { get; init; }
  205. [DisplayName("이메일 변경 시 - 제목")]
  206. public string? EmailVerifyFormTitle { get; init; }
  207. [DisplayName("이메일 변경 시 - 내용")]
  208. public string? EmailVerifyFormContent { get; init; }
  209. [DisplayName("이메일 변경 완료 - 제목")]
  210. public string? ChangedEmailFormTitle { get; init; }
  211. [DisplayName("이메일 변경 완료 - 내용")]
  212. public string? ChangedEmailFormContent { get; init; }
  213. }
  214. public sealed class ExternalApiConfigDto
  215. {
  216. [DisplayName("YouTube - API Name")]
  217. public string? YouTubeApiKeyEnc { get; init; }
  218. [DisplayName("YouTube - API Key")]
  219. public string? YouTubeApiName { get; init; }
  220. [DisplayName("Google - Client ID")]
  221. public string? GoogleClientId { get; init; }
  222. [DisplayName("Google - Client Secret")]
  223. public string? GoogleClientSecretEnc { get; init; }
  224. [DisplayName("Google - App ID")]
  225. public string? GoogleAppId { get; init; }
  226. [DisplayName("다날 - 결제 환경")]
  227. public string? DanalPayMode { get; init; }
  228. [DisplayName("다날 - Test CPID")]
  229. public string? DanalTestCpid { get; init; }
  230. [DisplayName("다날 - Test Client Key")]
  231. public string? DanalTestClientKeyEnc { get; init; }
  232. [DisplayName("다날 - Test Secret Key")]
  233. public string? DanalTestSecretKeyEnc { get; init; }
  234. [DisplayName("다날 - Live CPID")]
  235. public string? DanalLiveCpid { get; init; }
  236. [DisplayName("다날 - Live Client Key")]
  237. public string? DanalLiveClientKeyEnc { get; init; }
  238. [DisplayName("다날 - Live Secret Key")]
  239. public string? DanalLiveSecretKeyEnc { get; init; }
  240. }
  241. public sealed class PaymentConfigDto
  242. {
  243. [DisplayName("신용카드 수수료(%)")]
  244. public decimal? DanalCardFeeRate { get; init; }
  245. [DisplayName("신용카드 수수료(원)")]
  246. public decimal? DanalCardFeeAmount { get; init; }
  247. [DisplayName("카카오페이 수수료(%)")]
  248. public decimal? DanalKakaoPayFeeRate { get; init; }
  249. [DisplayName("카카오페이 수수료(원)")]
  250. public decimal? DanalKakaoPayFeeAmount { get; init; }
  251. [DisplayName("네이버페이 수수료(%)")]
  252. public decimal? DanalNaverPayFeeRate { get; init; }
  253. [DisplayName("네이버페이 수수료(원)")]
  254. public decimal? DanalNaverPayFeeAmount { get; init; }
  255. [DisplayName("계좌이체 수수료(%)")]
  256. public decimal? DanalTransferFeeRate { get; init; }
  257. [DisplayName("계좌이체 수수료(원)")]
  258. public decimal? DanalTransferFeeAmount { get; init; }
  259. [DisplayName("휴대폰 수수료(%)")]
  260. public decimal? DanalMobileFeeRate { get; init; }
  261. [DisplayName("휴대폰 수수료(원)")]
  262. public decimal? DanalMobileFeeAmount { get; init; }
  263. [DisplayName("가상계좌 수수료(%)")]
  264. public decimal? DanalVbankFeeRate { get; init; }
  265. [DisplayName("가상계좌 수수료(원)")]
  266. public decimal? DanalVbankFeeAmount { get; init; }
  267. [DisplayName("신용카드 사용 여부")]
  268. public bool IsCardEnabled { get; init; } = false;
  269. [DisplayName("카카오페이 사용 여부")]
  270. public bool IsKakaoPayEnabled { get; init; } = false;
  271. [DisplayName("네이버페이 사용 여부")]
  272. public bool IsNaverPayEnabled { get; init; } = false;
  273. [DisplayName("계좌이체 사용 여부")]
  274. public bool IsTransferEnabled { get; init; } = false;
  275. [DisplayName("휴대폰 사용 여부")]
  276. public bool IsMobileEnabled { get; init; } = false;
  277. [DisplayName("가상계좌 사용 여부")]
  278. public bool IsVirtualAccountEnabled { get; init; } = false;
  279. }
  280. public sealed class AttendanceConfigDto
  281. {
  282. [DisplayName("출석 기능 활성화")]
  283. public bool IsEnabled { get; init; } = false;
  284. [DisplayName("기본 경험치")]
  285. public int BaseExp { get; init; } = 0;
  286. [DisplayName("기본 포인트")]
  287. public int BasePoint { get; init; } = 0;
  288. [DisplayName("연속 출석 가중치 사용")]
  289. public bool UseStreakBonus { get; init; } = false;
  290. [DisplayName("1일당 추가 경험치")]
  291. public int StreakBonusPerDay { get; init; } = 0;
  292. [DisplayName("1일당 추가 포인트")]
  293. public int StreakBonusPointPerDay { get; init; } = 0;
  294. [DisplayName("가중치 최대 적용 일수")]
  295. public int StreakBonusMaxDays { get; init; } = 0;
  296. [DisplayName("순위 보상 사용")]
  297. public bool UseRankBonus { get; init; } = false;
  298. [DisplayName("순위별 보상 설정 (JSON)")]
  299. public string? RankBonusConfig { get; init; }
  300. }
  301. }