|
|
@@ -0,0 +1,432 @@
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
|
+using System.ComponentModel;
|
|
|
+using System.ComponentModel.DataAnnotations;
|
|
|
+
|
|
|
+namespace Application.Features.Config.Update;
|
|
|
+
|
|
|
+public sealed class Request
|
|
|
+{
|
|
|
+ public int ID { get; init; }
|
|
|
+
|
|
|
+ public BasicConfigDto Basic { get; init; } = new();
|
|
|
+ public ImagesConfigDto Images { get; init; } = new();
|
|
|
+ public MetaConfigDto Meta { get; init; } = new();
|
|
|
+ public CompanyConfigDto Company { get; init; } = new();
|
|
|
+ public AccountConfigDto Account { get; init; } = new();
|
|
|
+ public EmailTemplateConfigDto EmailTemplate { get; init; } = new();
|
|
|
+ public ExternalApiConfigDto External { get; init; } = new();
|
|
|
+ public PaymentConfigDto Payment { get; init; } = new();
|
|
|
+
|
|
|
+ public sealed class BasicConfigDto
|
|
|
+ {
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DisplayName("사이트 이름")]
|
|
|
+ public string? SiteName { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DataType(DataType.Url)]
|
|
|
+ [DisplayName("사이트 주소")]
|
|
|
+ public string? SiteURL { get; init; }
|
|
|
+
|
|
|
+ [DisplayName("최고 관리자 ID")]
|
|
|
+ public string? RootID { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DataType(DataType.EmailAddress)]
|
|
|
+ [DisplayName("송수신 이메일")]
|
|
|
+ public string? FromEmail { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(30)]
|
|
|
+ [DisplayName("송수신자 이름")]
|
|
|
+ public string? FromName { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DisplayName("SMTP Server")]
|
|
|
+ public string? SmtpServer { get; init; }
|
|
|
+
|
|
|
+ [Range(1, 65535)]
|
|
|
+ [DisplayName("SMTP Port")]
|
|
|
+ public int? SmtpPort { get; set; }
|
|
|
+
|
|
|
+ [DisplayName("SMTP Enable SSL")]
|
|
|
+ public bool SmtpEnableSSL { get; init; } = false;
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DisplayName("SMTP Username")]
|
|
|
+ public string? SmtpUsername { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DataType(DataType.Password)]
|
|
|
+ [DisplayName("SMTP Password")]
|
|
|
+ public string? SmtpPassword { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DataType(DataType.MultilineText)]
|
|
|
+ [DisplayName("관리자단 접근 가능 IP")]
|
|
|
+ public string? AdminWhiteIPList { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DataType(DataType.MultilineText)]
|
|
|
+ [DisplayName("사용자단 접근 가능 IP")]
|
|
|
+ public string? FrontWhiteIPList { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DisplayName("차단 시 안내문 제목")]
|
|
|
+ public string? BlockAlertTitle { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(5000)]
|
|
|
+ [DataType(DataType.MultilineText)]
|
|
|
+ [DisplayName("차단 시 안내문 내용")]
|
|
|
+ public string? BlockAlertContent { get; init; }
|
|
|
+
|
|
|
+ [DisplayName("점검 여부")]
|
|
|
+ public bool IsMaintenance { get; init; } = false;
|
|
|
+
|
|
|
+ [MaxLength(5000)]
|
|
|
+ [DataType(DataType.MultilineText)]
|
|
|
+ [DisplayName("점검 내용")]
|
|
|
+ public string? MaintenanceContent { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class ImagesConfigDto
|
|
|
+ {
|
|
|
+ // ====== DB에 저장/표시할 경로(문자열) ======
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Favicon")]
|
|
|
+ public string? FaviconPath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Logo-square")]
|
|
|
+ public string? LogoSquarePath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Logo-horizontal")]
|
|
|
+ public string? LogoHorizontalPath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("og-default")]
|
|
|
+ public string? OgDefaultPath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Twitter-image")]
|
|
|
+ public string? TwitterImagePath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Apple-touch-icon")]
|
|
|
+ public string? AppleTouchIconPath { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("App-icon-192")]
|
|
|
+ public string? AppIcon192Path { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("App-icon-512")]
|
|
|
+ public string? AppIcon512Path { get; init; }
|
|
|
+
|
|
|
+ // ====== 업로드 입력(폼 바인딩용) ======
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("Favicon 업로드")]
|
|
|
+ public IFormFile? FaviconFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("Logo-square 업로드")]
|
|
|
+ public IFormFile? LogoSquareFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("Logo-horizontal 업로드")]
|
|
|
+ public IFormFile? LogoHorizontalFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("og-default 업로드")]
|
|
|
+ public IFormFile? OgDefaultFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("Twitter-image 업로드")]
|
|
|
+ public IFormFile? TwitterImageFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("Apple-touch-icon 업로드")]
|
|
|
+ public IFormFile? AppleTouchIconFile { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("App-icon-192 업로드")]
|
|
|
+ public IFormFile? AppIcon192File { get; init; }
|
|
|
+
|
|
|
+ [DataType(DataType.Upload)]
|
|
|
+ [DisplayName("App-icon-512 업로드")]
|
|
|
+ public IFormFile? AppIcon512File { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class MetaConfigDto
|
|
|
+ {
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Keywords")]
|
|
|
+ public string? Keywords { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Description")]
|
|
|
+ public string? Description { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Author")]
|
|
|
+ public string? Author { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Viewport")]
|
|
|
+ public string? Viewport { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta ApplicationName")]
|
|
|
+ public string? ApplicationName { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Generator")]
|
|
|
+ public string? Generator { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("Meta Robots")]
|
|
|
+ public string? Robots { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(3000)]
|
|
|
+ [DataType(DataType.MultilineText)]
|
|
|
+ [DisplayName("Meta Adds")]
|
|
|
+ public string? Adds { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class CompanyConfigDto
|
|
|
+ {
|
|
|
+ [MaxLength(70)]
|
|
|
+ [DisplayName("상호 명")]
|
|
|
+ public string? Name { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DisplayName("사업자 등록 번호")]
|
|
|
+ public string? RegNo { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(255)]
|
|
|
+ [DisplayName("사업자 소재지")]
|
|
|
+ public string? Address { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(8)]
|
|
|
+ [DataType(DataType.PostalCode)]
|
|
|
+ [DisplayName("우편번호")]
|
|
|
+ public string? ZipCode { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(50)]
|
|
|
+ [DisplayName("대표자 명")]
|
|
|
+ public string? Owner { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(20)]
|
|
|
+ [DisplayName("대표 전화번호")]
|
|
|
+ public string? Tel { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(20)]
|
|
|
+ [DisplayName("FAX")]
|
|
|
+ public string? Fax { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(20)]
|
|
|
+ [DisplayName("통신판매업 신고번호")]
|
|
|
+ public string? RetailSaleNo { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(20)]
|
|
|
+ [DisplayName("부가통신 사업자번호")]
|
|
|
+ public string? AddedSaleNo { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DisplayName("호스팅 서비스")]
|
|
|
+ public string? Hosting { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(70)]
|
|
|
+ [DisplayName("정보관리책임자")]
|
|
|
+ public string? AdminName { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DataType(DataType.EmailAddress)]
|
|
|
+ [DisplayName("정보관리책임자 이메일")]
|
|
|
+ public string? AdminEmail { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(200)]
|
|
|
+ [DataType(DataType.Url)]
|
|
|
+ [DisplayName("사이트 주소")]
|
|
|
+ public string? SiteUrl { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(10)]
|
|
|
+ [DisplayName("입금계좌 - 은행")]
|
|
|
+ public string? BankCode { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(70)]
|
|
|
+ [DisplayName("입금계좌 - 예금주")]
|
|
|
+ public string? BankOwner { get; init; }
|
|
|
+
|
|
|
+ [MaxLength(100)]
|
|
|
+ [DisplayName("입금계좌 - 계좌번호")]
|
|
|
+ public string? BankNumber { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class AccountConfigDto
|
|
|
+ {
|
|
|
+ public bool IsRegisterBlock { get; init; }
|
|
|
+ public bool IsRegisterEmailAuth { get; init; }
|
|
|
+ public ushort? PasswordMinLength { get; init; }
|
|
|
+ public ushort? PasswordUppercaseLength { get; init; }
|
|
|
+ public ushort? PasswordNumbersLength { get; init; }
|
|
|
+ public ushort? PasswordSpecialcharsLength { get; init; }
|
|
|
+ public string? DeniedEmailList { get; init; }
|
|
|
+ public string? DeniedNameList { get; init; }
|
|
|
+ public ushort? ChangeEmailDay { get; init; }
|
|
|
+ public ushort? ChangeNameDay { get; init; }
|
|
|
+ public ushort? ChangeSummaryDay { get; init; }
|
|
|
+ public ushort? ChangeIntroDay { get; init; }
|
|
|
+ public ushort? ChangePasswordDay { get; init; }
|
|
|
+ public ushort? MaxLoginTryCount { get; init; }
|
|
|
+ public ushort? MaxLoginTryLimitSecond { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class EmailTemplateConfigDto
|
|
|
+ {
|
|
|
+ public string? RegisterEmailFormTitle { get; init; }
|
|
|
+ public string? RegisterEmailFormContent { get; init; }
|
|
|
+ public string? RegistrationEmailFormTitle { get; init; }
|
|
|
+ public string? RegistrationEmailFormContent { get; init; }
|
|
|
+ public string? ResetPasswordEmailFormTitle { get; init; }
|
|
|
+ public string? ResetPasswordEmailFormContent { get; init; }
|
|
|
+ public string? ChangedPasswordEmailFormTitle { get; init; }
|
|
|
+ public string? ChangedPasswordEmailFormContent { get; init; }
|
|
|
+ public string? WithdrawEmailFormTitle { get; init; }
|
|
|
+ public string? WithdrawEmailFormContent { get; init; }
|
|
|
+ public string? EmailVerifyFormTitle { get; init; }
|
|
|
+ public string? EmailVerifyFormContent { get; init; }
|
|
|
+ public string? ChangedEmailFormTitle { get; init; }
|
|
|
+ public string? ChangedEmailFormContent { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class ExternalApiConfigDto
|
|
|
+ {
|
|
|
+ public string? YouTubeApiKeyEnc { get; init; }
|
|
|
+ public string? YouTubeApiName { get; init; }
|
|
|
+ public string? GoogleClientId { get; init; }
|
|
|
+ public string? GoogleClientSecretEnc { get; init; }
|
|
|
+ public string? GoogleAppId { get; init; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public sealed class PaymentConfigDto
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Request From(Get.Response src) => new()
|
|
|
+ {
|
|
|
+ ID = src.ID,
|
|
|
+
|
|
|
+ Basic = new BasicConfigDto
|
|
|
+ {
|
|
|
+ SiteName = src.Basic.SiteName,
|
|
|
+ SiteURL = src.Basic.SiteURL,
|
|
|
+ RootID = src.Basic.RootID,
|
|
|
+ FromEmail = src.Basic.FromEmail,
|
|
|
+ FromName = src.Basic.FromName,
|
|
|
+ SmtpServer = src.Basic.SmtpServer,
|
|
|
+ SmtpPort = src.Basic.SmtpPort,
|
|
|
+ SmtpEnableSSL = src.Basic.SmtpEnableSSL,
|
|
|
+ SmtpUsername = src.Basic.SmtpUsername,
|
|
|
+ SmtpPassword = src.Basic.SmtpPassword,
|
|
|
+ AdminWhiteIPList = src.Basic.AdminWhiteIPList,
|
|
|
+ FrontWhiteIPList = src.Basic.FrontWhiteIPList,
|
|
|
+ BlockAlertTitle = src.Basic.BlockAlertTitle,
|
|
|
+ BlockAlertContent = src.Basic.BlockAlertContent,
|
|
|
+ IsMaintenance = src.Basic.IsMaintenance,
|
|
|
+ MaintenanceContent = src.Basic.MaintenanceContent
|
|
|
+ },
|
|
|
+
|
|
|
+ Images = new ImagesConfigDto
|
|
|
+ {
|
|
|
+ FaviconPath = src.Images.FaviconPath,
|
|
|
+ LogoSquarePath = src.Images.LogoSquarePath,
|
|
|
+ LogoHorizontalPath = src.Images.LogoHorizontalPath,
|
|
|
+ OgDefaultPath = src.Images.OgDefaultPath,
|
|
|
+ TwitterImagePath = src.Images.TwitterImagePath,
|
|
|
+ AppleTouchIconPath = src.Images.AppleTouchIconPath,
|
|
|
+ AppIcon192Path = src.Images.AppIcon192Path,
|
|
|
+ AppIcon512Path = src.Images.AppIcon512Path
|
|
|
+ },
|
|
|
+
|
|
|
+ Meta = new MetaConfigDto
|
|
|
+ {
|
|
|
+ Keywords = src.Meta.Keywords,
|
|
|
+ Description = src.Meta.Description,
|
|
|
+ Author = src.Meta.Author,
|
|
|
+ Viewport = src.Meta.Viewport,
|
|
|
+ ApplicationName = src.Meta.ApplicationName,
|
|
|
+ Generator = src.Meta.Generator,
|
|
|
+ Robots = src.Meta.Robots,
|
|
|
+ Adds = src.Meta.Adds
|
|
|
+ },
|
|
|
+
|
|
|
+ Company = new CompanyConfigDto
|
|
|
+ {
|
|
|
+ Name = src.Company.Name,
|
|
|
+ RegNo = src.Company.RegNo,
|
|
|
+ Address = src.Company.Address,
|
|
|
+ ZipCode = src.Company.ZipCode,
|
|
|
+ Owner = src.Company.Owner,
|
|
|
+ Tel = src.Company.Tel,
|
|
|
+ Fax = src.Company.Fax,
|
|
|
+ RetailSaleNo = src.Company.RetailSaleNo,
|
|
|
+ AddedSaleNo = src.Company.AddedSaleNo,
|
|
|
+ Hosting = src.Company.Hosting,
|
|
|
+ AdminName = src.Company.AdminName,
|
|
|
+ AdminEmail = src.Company.AdminEmail,
|
|
|
+ SiteUrl = src.Company.SiteUrl,
|
|
|
+ BankCode = src.Company.BankCode,
|
|
|
+ BankOwner = src.Company.BankOwner,
|
|
|
+ BankNumber = src.Company.BankNumber
|
|
|
+ },
|
|
|
+
|
|
|
+ Account = new AccountConfigDto
|
|
|
+ {
|
|
|
+ IsRegisterBlock = src.Account.IsRegisterBlock,
|
|
|
+ IsRegisterEmailAuth = src.Account.IsRegisterEmailAuth,
|
|
|
+ PasswordMinLength = src.Account.PasswordMinLength,
|
|
|
+ PasswordUppercaseLength = src.Account.PasswordUppercaseLength,
|
|
|
+ PasswordNumbersLength = src.Account.PasswordNumbersLength,
|
|
|
+ PasswordSpecialcharsLength = src.Account.PasswordSpecialcharsLength,
|
|
|
+ DeniedEmailList = src.Account.DeniedEmailList,
|
|
|
+ DeniedNameList = src.Account.DeniedNameList,
|
|
|
+ ChangeEmailDay = src.Account.ChangeEmailDay,
|
|
|
+ ChangeNameDay = src.Account.ChangeNameDay,
|
|
|
+ ChangeSummaryDay = src.Account.ChangeSummaryDay,
|
|
|
+ ChangeIntroDay = src.Account.ChangeIntroDay,
|
|
|
+ ChangePasswordDay = src.Account.ChangePasswordDay,
|
|
|
+ MaxLoginTryCount = src.Account.MaxLoginTryCount,
|
|
|
+ MaxLoginTryLimitSecond = src.Account.MaxLoginTryLimitSecond
|
|
|
+ },
|
|
|
+
|
|
|
+ EmailTemplate = new EmailTemplateConfigDto
|
|
|
+ {
|
|
|
+ RegisterEmailFormTitle = src.EmailTemplate.RegisterEmailFormTitle,
|
|
|
+ RegisterEmailFormContent = src.EmailTemplate.RegisterEmailFormContent,
|
|
|
+ RegistrationEmailFormTitle = src.EmailTemplate.RegistrationEmailFormTitle,
|
|
|
+ RegistrationEmailFormContent = src.EmailTemplate.RegistrationEmailFormContent,
|
|
|
+ ResetPasswordEmailFormTitle = src.EmailTemplate.ResetPasswordEmailFormTitle,
|
|
|
+ ResetPasswordEmailFormContent = src.EmailTemplate.ResetPasswordEmailFormContent,
|
|
|
+ ChangedPasswordEmailFormTitle = src.EmailTemplate.ChangedPasswordEmailFormTitle,
|
|
|
+ ChangedPasswordEmailFormContent = src.EmailTemplate.ChangedPasswordEmailFormContent,
|
|
|
+ WithdrawEmailFormTitle = src.EmailTemplate.WithdrawEmailFormTitle,
|
|
|
+ WithdrawEmailFormContent = src.EmailTemplate.WithdrawEmailFormContent,
|
|
|
+ EmailVerifyFormTitle = src.EmailTemplate.EmailVerifyFormTitle,
|
|
|
+ EmailVerifyFormContent = src.EmailTemplate.EmailVerifyFormContent,
|
|
|
+ ChangedEmailFormTitle = src.EmailTemplate.ChangedEmailFormTitle,
|
|
|
+ ChangedEmailFormContent = src.EmailTemplate.ChangedEmailFormContent
|
|
|
+ },
|
|
|
+
|
|
|
+ External = new ExternalApiConfigDto
|
|
|
+ {
|
|
|
+ YouTubeApiKeyEnc = src.External.YouTubeApiKeyEnc,
|
|
|
+ YouTubeApiName = src.External.YouTubeApiName,
|
|
|
+ GoogleClientId = src.External.GoogleClientId,
|
|
|
+ GoogleClientSecretEnc = src.External.GoogleClientSecretEnc,
|
|
|
+ GoogleAppId = src.External.GoogleAppId
|
|
|
+ },
|
|
|
+
|
|
|
+ Payment = new PaymentConfigDto()
|
|
|
+ };
|
|
|
+}
|