|
|
@@ -5,96 +5,96 @@ 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 TossConfigDto Toss { get; init; } = new();
|
|
|
- public AttendanceConfigDto? Attendance { get; init; }
|
|
|
- public SignupRewardConfigDto? SignupReward { get; init; }
|
|
|
- public RewardConfigDto? Reward { get; init; }
|
|
|
- public PaperConfigDto? Paper { get; init; }
|
|
|
- public DataCollectionConfigDto? DataCollection { get; init; }
|
|
|
+ public int ID { get; set; }
|
|
|
+
|
|
|
+ public BasicConfigDto Basic { get; set; } = new();
|
|
|
+ public ImagesConfigDto Images { get; set; } = new();
|
|
|
+ public MetaConfigDto Meta { get; set; } = new();
|
|
|
+ public CompanyConfigDto Company { get; set; } = new();
|
|
|
+ public AccountConfigDto Account { get; set; } = new();
|
|
|
+ public EmailTemplateConfigDto EmailTemplate { get; set; } = new();
|
|
|
+ public ExternalApiConfigDto External { get; set; } = new();
|
|
|
+ public TossConfigDto Toss { get; set; } = new();
|
|
|
+ public AttendanceConfigDto? Attendance { get; set; }
|
|
|
+ public SignupRewardConfigDto? SignupReward { get; set; }
|
|
|
+ public RewardConfigDto? Reward { get; set; }
|
|
|
+ public PaperConfigDto? Paper { get; set; }
|
|
|
+ public DataCollectionConfigDto? DataCollection { get; set; }
|
|
|
|
|
|
// 기본 설정
|
|
|
public sealed class BasicConfigDto
|
|
|
{
|
|
|
[MaxLength(100)]
|
|
|
[DisplayName("사이트 이름")]
|
|
|
- public string? SiteName { get; init; }
|
|
|
+ public string? SiteName { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DataType(DataType.Url)]
|
|
|
[DisplayName("사이트 주소")]
|
|
|
- public string? SiteURL { get; init; }
|
|
|
+ public string? SiteURL { get; set; }
|
|
|
|
|
|
[DisplayName("최고 관리자 ID")]
|
|
|
- public string? RootID { get; init; }
|
|
|
+ public string? RootID { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DataType(DataType.EmailAddress)]
|
|
|
[DisplayName("발송자 이메일")]
|
|
|
- public string? FromEmail { get; init; }
|
|
|
+ public string? FromEmail { get; set; }
|
|
|
|
|
|
[MaxLength(30)]
|
|
|
[DisplayName("발송자 이름")]
|
|
|
- public string? FromName { get; init; }
|
|
|
+ public string? FromName { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DisplayName("SMTP Server")]
|
|
|
- public string? SmtpServer { get; init; }
|
|
|
+ public string? SmtpServer { get; set; }
|
|
|
|
|
|
[Range(1, 65535)]
|
|
|
[DisplayName("SMTP Port")]
|
|
|
public int? SmtpPort { get; set; }
|
|
|
|
|
|
[DisplayName("SMTP Enable SSL")]
|
|
|
- public bool SmtpEnableSSL { get; init; } = false;
|
|
|
+ public bool SmtpEnableSSL { get; set; } = false;
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DisplayName("SMTP Username")]
|
|
|
- public string? SmtpUsername { get; init; }
|
|
|
+ public string? SmtpUsername { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DataType(DataType.Password)]
|
|
|
[DisplayName("SMTP Password")]
|
|
|
- public string? SmtpPassword { get; init; }
|
|
|
+ public string? SmtpPassword { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DataType(DataType.MultilineText)]
|
|
|
[DisplayName("관리자단 접근 가능 IP")]
|
|
|
- public string? AdminWhiteIPList { get; init; }
|
|
|
+ public string? AdminWhiteIPList { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DataType(DataType.MultilineText)]
|
|
|
[DisplayName("사용자단 접근 가능 IP")]
|
|
|
- public string? FrontWhiteIPList { get; init; }
|
|
|
+ public string? FrontWhiteIPList { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DisplayName("차단 시 안내문 제목")]
|
|
|
- public string? BlockAlertTitle { get; init; }
|
|
|
+ public string? BlockAlertTitle { get; set; }
|
|
|
|
|
|
[MaxLength(5000)]
|
|
|
[DataType(DataType.MultilineText)]
|
|
|
[DisplayName("차단 시 안내문 내용")]
|
|
|
- public string? BlockAlertContent { get; init; }
|
|
|
+ public string? BlockAlertContent { get; set; }
|
|
|
|
|
|
[DisplayName("점검 여부")]
|
|
|
- public bool IsMaintenance { get; init; } = false;
|
|
|
+ public bool IsMaintenance { get; set; } = false;
|
|
|
|
|
|
[MaxLength(5000)]
|
|
|
[DataType(DataType.MultilineText)]
|
|
|
[DisplayName("점검 내용")]
|
|
|
- public string? MaintenanceContent { get; init; }
|
|
|
+ public string? MaintenanceContent { get; set; }
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("쪽지 일일 발송 제한")]
|
|
|
- public int NoteDailySendLimit { get; init; } = 3;
|
|
|
+ public int NoteDailySendLimit { get; set; } = 3;
|
|
|
}
|
|
|
|
|
|
// 이미지 경로 및 업로드 입력
|
|
|
@@ -103,68 +103,68 @@ public sealed class Request
|
|
|
// ====== DB에 저장/표기할 경로(문자열) ======
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Favicon")]
|
|
|
- public string? FaviconPath { get; init; }
|
|
|
+ public string? FaviconPath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Logo-square")]
|
|
|
- public string? LogoSquarePath { get; init; }
|
|
|
+ public string? LogoSquarePath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Logo-horizontal")]
|
|
|
- public string? LogoHorizontalPath { get; init; }
|
|
|
+ public string? LogoHorizontalPath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("og-default")]
|
|
|
- public string? OgDefaultPath { get; init; }
|
|
|
+ public string? OgDefaultPath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Twitter-image")]
|
|
|
- public string? TwitterImagePath { get; init; }
|
|
|
+ public string? TwitterImagePath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Apple-touch-icon")]
|
|
|
- public string? AppleTouchIconPath { get; init; }
|
|
|
+ public string? AppleTouchIconPath { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("App-icon-192")]
|
|
|
- public string? AppIcon192Path { get; init; }
|
|
|
+ public string? AppIcon192Path { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("App-icon-512")]
|
|
|
- public string? AppIcon512Path { get; init; }
|
|
|
+ public string? AppIcon512Path { get; set; }
|
|
|
|
|
|
// ====== 업로드 입력(새 업로드용) ======
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("Favicon 업로드")]
|
|
|
- public IFormFile? FaviconFile { get; init; }
|
|
|
+ public IFormFile? FaviconFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("Logo-square 업로드")]
|
|
|
- public IFormFile? LogoSquareFile { get; init; }
|
|
|
+ public IFormFile? LogoSquareFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("Logo-horizontal 업로드")]
|
|
|
- public IFormFile? LogoHorizontalFile { get; init; }
|
|
|
+ public IFormFile? LogoHorizontalFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("og-default 업로드")]
|
|
|
- public IFormFile? OgDefaultFile { get; init; }
|
|
|
+ public IFormFile? OgDefaultFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("Twitter-image 업로드")]
|
|
|
- public IFormFile? TwitterImageFile { get; init; }
|
|
|
+ public IFormFile? TwitterImageFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("Apple-touch-icon 업로드")]
|
|
|
- public IFormFile? AppleTouchIconFile { get; init; }
|
|
|
+ public IFormFile? AppleTouchIconFile { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("App-icon-192 업로드")]
|
|
|
- public IFormFile? AppIcon192File { get; init; }
|
|
|
+ public IFormFile? AppIcon192File { get; set; }
|
|
|
|
|
|
[DataType(DataType.Upload)]
|
|
|
[DisplayName("App-icon-512 업로드")]
|
|
|
- public IFormFile? AppIcon512File { get; init; }
|
|
|
+ public IFormFile? AppIcon512File { get; set; }
|
|
|
}
|
|
|
|
|
|
// 메타 태그
|
|
|
@@ -172,36 +172,36 @@ public sealed class Request
|
|
|
{
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Keywords")]
|
|
|
- public string? Keywords { get; init; }
|
|
|
+ public string? Keywords { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Description")]
|
|
|
- public string? Description { get; init; }
|
|
|
+ public string? Description { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Author")]
|
|
|
- public string? Author { get; init; }
|
|
|
+ public string? Author { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Viewport")]
|
|
|
- public string? Viewport { get; init; }
|
|
|
+ public string? Viewport { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta ApplicationName")]
|
|
|
- public string? ApplicationName { get; init; }
|
|
|
+ public string? ApplicationName { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Generator")]
|
|
|
- public string? Generator { get; init; }
|
|
|
+ public string? Generator { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("Meta Robots")]
|
|
|
- public string? Robots { get; init; }
|
|
|
+ public string? Robots { get; set; }
|
|
|
|
|
|
[MaxLength(3000)]
|
|
|
[DataType(DataType.MultilineText)]
|
|
|
[DisplayName("Meta Adds")]
|
|
|
- public string? Adds { get; init; }
|
|
|
+ public string? Adds { get; set; }
|
|
|
}
|
|
|
|
|
|
// 회사 정보
|
|
|
@@ -209,135 +209,135 @@ public sealed class Request
|
|
|
{
|
|
|
[MaxLength(70)]
|
|
|
[DisplayName("상호 명")]
|
|
|
- public string? Name { get; init; }
|
|
|
+ public string? Name { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DisplayName("사업자 등록 번호")]
|
|
|
- public string? RegNo { get; init; }
|
|
|
+ public string? RegNo { get; set; }
|
|
|
|
|
|
[MaxLength(255)]
|
|
|
[DisplayName("사업장 소재지")]
|
|
|
- public string? Address { get; init; }
|
|
|
+ public string? Address { get; set; }
|
|
|
|
|
|
[MaxLength(8)]
|
|
|
[DataType(DataType.PostalCode)]
|
|
|
[DisplayName("우편번호")]
|
|
|
- public string? ZipCode { get; init; }
|
|
|
+ public string? ZipCode { get; set; }
|
|
|
|
|
|
[MaxLength(50)]
|
|
|
[DisplayName("대표자 명")]
|
|
|
- public string? Owner { get; init; }
|
|
|
+ public string? Owner { get; set; }
|
|
|
|
|
|
[MaxLength(20)]
|
|
|
[DisplayName("대표 전화번호")]
|
|
|
- public string? Tel { get; init; }
|
|
|
+ public string? Tel { get; set; }
|
|
|
|
|
|
[MaxLength(20)]
|
|
|
[DisplayName("FAX")]
|
|
|
- public string? Fax { get; init; }
|
|
|
+ public string? Fax { get; set; }
|
|
|
|
|
|
[MaxLength(20)]
|
|
|
[DisplayName("통신판매업 신고번호")]
|
|
|
- public string? RetailSaleNo { get; init; }
|
|
|
+ public string? RetailSaleNo { get; set; }
|
|
|
|
|
|
[MaxLength(20)]
|
|
|
[DisplayName("부가통신 사업자번호")]
|
|
|
- public string? AddedSaleNo { get; init; }
|
|
|
+ public string? AddedSaleNo { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DisplayName("호스팅 서비스")]
|
|
|
- public string? Hosting { get; init; }
|
|
|
+ public string? Hosting { get; set; }
|
|
|
|
|
|
[MaxLength(70)]
|
|
|
[DisplayName("정보관리책임자")]
|
|
|
- public string? AdminName { get; init; }
|
|
|
+ public string? AdminName { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DataType(DataType.EmailAddress)]
|
|
|
[DisplayName("정보관리책임자 이메일")]
|
|
|
- public string? AdminEmail { get; init; }
|
|
|
+ public string? AdminEmail { get; set; }
|
|
|
|
|
|
[MaxLength(200)]
|
|
|
[DataType(DataType.Url)]
|
|
|
[DisplayName("사이트 주소")]
|
|
|
- public string? SiteUrl { get; init; }
|
|
|
+ public string? SiteUrl { get; set; }
|
|
|
|
|
|
[MaxLength(10)]
|
|
|
[DisplayName("입금계좌 - 은행")]
|
|
|
- public string? BankCode { get; init; }
|
|
|
+ public string? BankCode { get; set; }
|
|
|
|
|
|
[MaxLength(70)]
|
|
|
[DisplayName("입금계좌 - 예금주")]
|
|
|
- public string? BankOwner { get; init; }
|
|
|
+ public string? BankOwner { get; set; }
|
|
|
|
|
|
[MaxLength(100)]
|
|
|
[DisplayName("입금계좌 - 계좌번호")]
|
|
|
- public string? BankNumber { get; init; }
|
|
|
+ public string? BankNumber { get; set; }
|
|
|
}
|
|
|
|
|
|
// 회원 설정
|
|
|
public sealed class AccountConfigDto
|
|
|
{
|
|
|
[DisplayName("회원가입 시 - 가입 차단")]
|
|
|
- public bool IsRegisterBlock { get; init; } = false;
|
|
|
+ public bool IsRegisterBlock { get; set; } = false;
|
|
|
|
|
|
[DisplayName("회원가입 시 - 이메일 인증 여부")]
|
|
|
- public bool IsRegisterEmailAuth { get; init; } = false;
|
|
|
+ public bool IsRegisterEmailAuth { get; set; } = false;
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("회원가입 시 - 비밀번호 최소 길이")]
|
|
|
- public ushort? PasswordMinLength { get; init; }
|
|
|
+ public ushort? PasswordMinLength { get; set; }
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("회원가입 시 - 비밀번호 대문자 최소 길이")]
|
|
|
- public ushort? PasswordUppercaseLength { get; init; }
|
|
|
+ public ushort? PasswordUppercaseLength { get; set; }
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("회원가입 시 - 비밀번호 숫자 최소 길이")]
|
|
|
- public ushort? PasswordNumbersLength { get; init; }
|
|
|
+ public ushort? PasswordNumbersLength { get; set; }
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("회원가입 시 - 비밀번호 특수문자 최소 길이")]
|
|
|
- public ushort? PasswordSpecialcharsLength { get; init; }
|
|
|
+ public ushort? PasswordSpecialcharsLength { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 시 - 금지 이메일")]
|
|
|
- public string? DeniedEmailList { get; init; }
|
|
|
+ public string? DeniedEmailList { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 시 - 금지 별명")]
|
|
|
- public string? DeniedNameList { get; init; }
|
|
|
+ public string? DeniedNameList { get; set; }
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("회원가입 시 - 이메일 갱신 주기")]
|
|
|
- public ushort? ChangeEmailDay { get; init; }
|
|
|
+ public ushort? ChangeEmailDay { get; set; }
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("회원가입 시 - 별명 갱신 주기")]
|
|
|
- public ushort? ChangeNameDay { get; init; }
|
|
|
+ public ushort? ChangeNameDay { get; set; }
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("회원가입 시 - 한마디 갱신 주기")]
|
|
|
- public ushort? ChangeSummaryDay { get; init; }
|
|
|
+ public ushort? ChangeSummaryDay { get; set; }
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("회원가입 시 - 자기소개 갱신 주기")]
|
|
|
- public ushort? ChangeIntroDay { get; init; }
|
|
|
+ public ushort? ChangeIntroDay { get; set; }
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("회원가입 시 - 비밀번호 갱신 주기")]
|
|
|
- public ushort? ChangePasswordDay { get; init; }
|
|
|
+ public ushort? ChangePasswordDay { get; set; }
|
|
|
|
|
|
[DisplayName("로그인 시 - 이메일 인증 필요")]
|
|
|
- public bool IsLoginEmailVerifiedOnly { get; init; } = false;
|
|
|
+ public bool IsLoginEmailVerifiedOnly { get; set; } = false;
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("로그인 시 - 로그인 시도(회)")]
|
|
|
- public ushort? MaxLoginTryCount { get; init; }
|
|
|
+ public ushort? MaxLoginTryCount { get; set; }
|
|
|
|
|
|
[Range(0, 86400)]
|
|
|
[DisplayName("로그인 시 - 로그인 제한(초)")]
|
|
|
- public ushort? MaxLoginTryLimitSecond { get; init; }
|
|
|
+ public ushort? MaxLoginTryLimitSecond { get; set; }
|
|
|
}
|
|
|
|
|
|
// 알림 발송 양식
|
|
|
@@ -345,67 +345,67 @@ public sealed class Request
|
|
|
{
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 시 - 제목")]
|
|
|
- public string? RegisterEmailFormTitle { get; init; }
|
|
|
+ public string? RegisterEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 시 - 내용")]
|
|
|
- public string? RegisterEmailFormContent { get; init; }
|
|
|
+ public string? RegisterEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 완료 - 제목")]
|
|
|
- public string? RegistrationEmailFormTitle { get; init; }
|
|
|
+ public string? RegistrationEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원가입 완료 - 내용")]
|
|
|
- public string? RegistrationEmailFormContent { get; init; }
|
|
|
+ public string? RegistrationEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("비밀번호 재설정 - 제목")]
|
|
|
- public string? ResetPasswordEmailFormTitle { get; init; }
|
|
|
+ public string? ResetPasswordEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("비밀번호 재설정 - 내용")]
|
|
|
- public string? ResetPasswordEmailFormContent { get; init; }
|
|
|
+ public string? ResetPasswordEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("비밀번호 변경 완료 - 제목")]
|
|
|
- public string? ChangedPasswordEmailFormTitle { get; init; }
|
|
|
+ public string? ChangedPasswordEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("비밀번호 변경 완료 - 내용")]
|
|
|
- public string? ChangedPasswordEmailFormContent { get; init; }
|
|
|
+ public string? ChangedPasswordEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원탈퇴 시 - 제목")]
|
|
|
- public string? WithdrawEmailFormTitle { get; init; }
|
|
|
+ public string? WithdrawEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원탈퇴 시 - 내용")]
|
|
|
- public string? WithdrawEmailFormContent { get; init; }
|
|
|
+ public string? WithdrawEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원탈퇴 인증 - 제목")]
|
|
|
- public string? WithdrawVerifyEmailFormTitle { get; init; }
|
|
|
+ public string? WithdrawVerifyEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("회원탈퇴 인증 - 내용")]
|
|
|
- public string? WithdrawVerifyEmailFormContent { get; init; }
|
|
|
+ public string? WithdrawVerifyEmailFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("이메일 변경 시 - 제목")]
|
|
|
- public string? EmailVerifyFormTitle { get; init; }
|
|
|
+ public string? EmailVerifyFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("이메일 변경 시 - 내용")]
|
|
|
- public string? EmailVerifyFormContent { get; init; }
|
|
|
+ public string? EmailVerifyFormContent { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("이메일 변경 완료 - 제목")]
|
|
|
- public string? ChangedEmailFormTitle { get; init; }
|
|
|
+ public string? ChangedEmailFormTitle { get; set; }
|
|
|
|
|
|
[MaxLength(4000)]
|
|
|
[DisplayName("이메일 변경 완료 - 내용")]
|
|
|
- public string? ChangedEmailFormContent { get; init; }
|
|
|
+ public string? ChangedEmailFormContent { get; set; }
|
|
|
}
|
|
|
|
|
|
// API 정보
|
|
|
@@ -414,46 +414,46 @@ public sealed class Request
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("YouTube - API Name")]
|
|
|
- public string? YouTubeApiKeyEnc { get; init; }
|
|
|
+ public string? YouTubeApiKeyEnc { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("YouTube - API Key")]
|
|
|
- public string? YouTubeApiName { get; init; }
|
|
|
+ public string? YouTubeApiName { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("Google - Client ID")]
|
|
|
- public string? GoogleClientId { get; init; }
|
|
|
+ public string? GoogleClientId { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("Google - Client Secret")]
|
|
|
- public string? GoogleClientSecretEnc { get; init; }
|
|
|
+ public string? GoogleClientSecretEnc { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("Google - App ID")]
|
|
|
- public string? GoogleAppId { get; init; }
|
|
|
+ public string? GoogleAppId { get; set; }
|
|
|
|
|
|
// 소셜 로그인 (OAuth) — 비밀 키는 빈 값 제출 시 기존 유지(입력 시 암호화 저장), ID/JS 키는 직접 저장
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("네이버 - Client ID")]
|
|
|
- public string? NaverClientId { get; init; }
|
|
|
+ public string? NaverClientId { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("네이버 - Client Secret")]
|
|
|
- public string? NaverClientSecret { get; init; }
|
|
|
+ public string? NaverClientSecret { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("카카오 - REST API 키")]
|
|
|
- public string? KakaoRestApiKey { get; init; }
|
|
|
+ public string? KakaoRestApiKey { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("카카오 - JavaScript 키")]
|
|
|
- public string? KakaoJavascriptKey { get; init; }
|
|
|
+ public string? KakaoJavascriptKey { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("카카오 - Admin 키")]
|
|
|
- public string? KakaoAdminKey { get; init; }
|
|
|
+ public string? KakaoAdminKey { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("네이버검색 - Client ID")]
|
|
|
- public string? NaverSearchClientId { get; init; }
|
|
|
+ public string? NaverSearchClientId { get; set; }
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("네이버검색 - Client Secret")]
|
|
|
- public string? NaverSearchClientSecret { get; init; }
|
|
|
+ public string? NaverSearchClientSecret { get; set; }
|
|
|
}
|
|
|
|
|
|
// 데이터 수집 API 키 + 수집기 활성화. 키는 빈 값 제출 시 기존 유지(입력 시 암호화 저장), 플래그는 수집기 on/off.
|
|
|
@@ -461,53 +461,53 @@ public sealed class Request
|
|
|
{
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("금융위 data.go.kr ServiceKey")]
|
|
|
- public string? DataGoKrServiceKey { get; init; }
|
|
|
+ public string? DataGoKrServiceKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("KRX AUTH_KEY")]
|
|
|
- public string? KrxApiKey { get; init; }
|
|
|
+ public string? KrxApiKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("OpenDART crtfc_key")]
|
|
|
- public string? OpenDartApiKey { get; init; }
|
|
|
+ public string? OpenDartApiKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("수출입은행 환율(AP01) authkey")]
|
|
|
- public string? KoreaEximExchangeKey { get; init; }
|
|
|
+ public string? KoreaEximExchangeKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("수출입은행 대출금리(AP02) authkey")]
|
|
|
- public string? KoreaEximLoanRateKey { get; init; }
|
|
|
+ public string? KoreaEximLoanRateKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("수출입은행 국제금리(AP03) authkey")]
|
|
|
- public string? KoreaEximIntlRateKey { get; init; }
|
|
|
+ public string? KoreaEximIntlRateKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("SEIBro key")]
|
|
|
- public string? SeibroApiKey { get; init; }
|
|
|
+ public string? SeibroApiKey { get; set; }
|
|
|
[MaxLength(1000)]
|
|
|
[DisplayName("KOSIS apiKey")]
|
|
|
- public string? KosisApiKey { get; init; }
|
|
|
+ public string? KosisApiKey { get; set; }
|
|
|
|
|
|
// 수집기 활성화 플래그
|
|
|
- public bool StockDataMasterSync { get; init; }
|
|
|
- public bool StockDataDailyPriceSync { get; init; }
|
|
|
- public bool KrxIndexSync { get; init; }
|
|
|
- public bool KrxBondIndexSync { get; init; }
|
|
|
- public bool KrxStockSync { get; init; }
|
|
|
- public bool KrxEtpSync { get; init; }
|
|
|
- public bool KrxWarrantSync { get; init; }
|
|
|
- public bool KrxBondSync { get; init; }
|
|
|
- public bool KrxDerivativeSync { get; init; }
|
|
|
- public bool KrxCommoditySync { get; init; }
|
|
|
- public bool KrxEsgSync { get; init; }
|
|
|
- public bool OpenDartDisclosureSync { get; init; }
|
|
|
- public bool KoreaEximMacroSync { get; init; }
|
|
|
- public bool KosisSync { get; init; }
|
|
|
- public bool WorldIndexEnabled { get; init; }
|
|
|
- public bool MarketQuoteEnabled { get; init; }
|
|
|
- public bool SeibroIssuerSync { get; init; }
|
|
|
- public bool SeibroDividendSync { get; init; }
|
|
|
- public bool SeibroSupplySync { get; init; }
|
|
|
- public bool SeibroCorpActionSync { get; init; }
|
|
|
- public bool SeibroBondSync { get; init; }
|
|
|
- public bool SeibroDerivSync { get; init; }
|
|
|
- public bool SeibroForeignSync { get; init; }
|
|
|
+ public bool StockDataMasterSync { get; set; }
|
|
|
+ public bool StockDataDailyPriceSync { get; set; }
|
|
|
+ public bool KrxIndexSync { get; set; }
|
|
|
+ public bool KrxBondIndexSync { get; set; }
|
|
|
+ public bool KrxStockSync { get; set; }
|
|
|
+ public bool KrxEtpSync { get; set; }
|
|
|
+ public bool KrxWarrantSync { get; set; }
|
|
|
+ public bool KrxBondSync { get; set; }
|
|
|
+ public bool KrxDerivativeSync { get; set; }
|
|
|
+ public bool KrxCommoditySync { get; set; }
|
|
|
+ public bool KrxEsgSync { get; set; }
|
|
|
+ public bool OpenDartDisclosureSync { get; set; }
|
|
|
+ public bool KoreaEximMacroSync { get; set; }
|
|
|
+ public bool KosisSync { get; set; }
|
|
|
+ public bool WorldIndexEnabled { get; set; }
|
|
|
+ public bool MarketQuoteEnabled { get; set; }
|
|
|
+ public bool SeibroIssuerSync { get; set; }
|
|
|
+ public bool SeibroDividendSync { get; set; }
|
|
|
+ public bool SeibroSupplySync { get; set; }
|
|
|
+ public bool SeibroCorpActionSync { get; set; }
|
|
|
+ public bool SeibroBondSync { get; set; }
|
|
|
+ public bool SeibroDerivSync { get; set; }
|
|
|
+ public bool SeibroForeignSync { get; set; }
|
|
|
}
|
|
|
|
|
|
// 토스페이먼츠 결제 설정 (결제 설정 화면 전용)
|
|
|
@@ -515,79 +515,79 @@ public sealed class Request
|
|
|
public sealed class TossConfigDto
|
|
|
{
|
|
|
[DisplayName("토스 - 결제 환경")]
|
|
|
- public string? TossPayMode { get; init; }
|
|
|
+ public string? TossPayMode { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("토스 - Test Client Key")]
|
|
|
- public string? TestClientKey { get; init; }
|
|
|
+ public string? TestClientKey { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("토스 - Test Secret Key")]
|
|
|
- public string? TestSecretKey { get; init; }
|
|
|
+ public string? TestSecretKey { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("토스 - Live Client Key")]
|
|
|
- public string? LiveClientKey { get; init; }
|
|
|
+ public string? LiveClientKey { get; set; }
|
|
|
|
|
|
[MaxLength(500)]
|
|
|
[DisplayName("토스 - Live Secret Key")]
|
|
|
- public string? LiveSecretKey { get; init; }
|
|
|
+ public string? LiveSecretKey { get; set; }
|
|
|
}
|
|
|
|
|
|
// 출석 설정
|
|
|
public sealed class AttendanceConfigDto
|
|
|
{
|
|
|
[DisplayName("출석 기능 활성화")]
|
|
|
- public bool IsEnabled { get; init; } = false;
|
|
|
+ public bool IsEnabled { get; set; } = false;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("기본 경험치")]
|
|
|
- public int BaseExp { get; init; } = 0;
|
|
|
+ public int BaseExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("기본 코인")]
|
|
|
- public int BasePoint { get; init; } = 0;
|
|
|
+ public int BasePoint { get; set; } = 0;
|
|
|
|
|
|
[DisplayName("연속 출석 가중치 사용")]
|
|
|
- public bool UseStreakBonus { get; init; } = false;
|
|
|
+ public bool UseStreakBonus { get; set; } = false;
|
|
|
|
|
|
[Range(0, 10000)]
|
|
|
[DisplayName("1일당 추가 경험치")]
|
|
|
- public int StreakBonusPerDay { get; init; } = 0;
|
|
|
+ public int StreakBonusPerDay { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 10000)]
|
|
|
[DisplayName("1일당 추가 코인")]
|
|
|
- public int StreakBonusPointPerDay { get; init; } = 0;
|
|
|
+ public int StreakBonusPointPerDay { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 365)]
|
|
|
[DisplayName("가중치 최대 적용 일수")]
|
|
|
- public int StreakBonusMaxDays { get; init; } = 0;
|
|
|
+ public int StreakBonusMaxDays { get; set; } = 0;
|
|
|
|
|
|
[DisplayName("순위 보상 사용")]
|
|
|
- public bool UseRankBonus { get; init; } = false;
|
|
|
+ public bool UseRankBonus { get; set; } = false;
|
|
|
|
|
|
[MaxLength(2000)]
|
|
|
[DisplayName("순위별 보상 설정 (JSON)")]
|
|
|
- public string? RankBonusConfig { get; init; }
|
|
|
+ public string? RankBonusConfig { get; set; }
|
|
|
}
|
|
|
|
|
|
// 가입 축하 보상 설정
|
|
|
public sealed class SignupRewardConfigDto
|
|
|
{
|
|
|
[DisplayName("가입 축하 보상 활성화")]
|
|
|
- public bool Enabled { get; init; } = false;
|
|
|
+ public bool Enabled { get; set; } = false;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("지급 코인")]
|
|
|
- public int CoinAmount { get; init; } = 0;
|
|
|
+ public int CoinAmount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("지급 캐시")]
|
|
|
- public int CashAmount { get; init; } = 0;
|
|
|
+ public int CashAmount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("지급 경험치")]
|
|
|
- public int ExpAmount { get; init; } = 0;
|
|
|
+ public int ExpAmount { get; set; } = 0;
|
|
|
}
|
|
|
|
|
|
// 보상 엔진 설정 (Reward) — d3 M2. ActivityToken 대체·통합.
|
|
|
@@ -595,134 +595,134 @@ public sealed class Request
|
|
|
{
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("게시글 경험치")]
|
|
|
- public int PostExp { get; init; } = 0;
|
|
|
+ public int PostExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("게시글 토큰")]
|
|
|
- public int PostPoint { get; init; } = 0;
|
|
|
+ public int PostPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("댓글 경험치")]
|
|
|
- public int CommentExp { get; init; } = 0;
|
|
|
+ public int CommentExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("댓글 토큰")]
|
|
|
- public int CommentPoint { get; init; } = 0;
|
|
|
+ public int CommentPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(누른 쪽) 경험치")]
|
|
|
- public int LikeGivenExp { get; init; } = 0;
|
|
|
+ public int LikeGivenExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(받은 쪽) 토큰")]
|
|
|
- public int LikeReceivedPoint { get; init; } = 0;
|
|
|
+ public int LikeReceivedPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("최소 게시글 길이")]
|
|
|
- public int MinPostLength { get; init; } = 0;
|
|
|
+ public int MinPostLength { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("최소 댓글 길이")]
|
|
|
- public int MinCommentLength { get; init; } = 0;
|
|
|
+ public int MinCommentLength { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 3650)]
|
|
|
[DisplayName("신규 회원 보상 유예(일)")]
|
|
|
- public int NewMemberHoldDays { get; init; } = 0;
|
|
|
+ public int NewMemberHoldDays { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("게시글 일일 횟수 상한")]
|
|
|
- public int PostDailyCount { get; init; } = 0;
|
|
|
+ public int PostDailyCount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("게시글 일일 경험치 상한")]
|
|
|
- public int PostDailyExp { get; init; } = 0;
|
|
|
+ public int PostDailyExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("게시글 일일 토큰 상한")]
|
|
|
- public int PostDailyPoint { get; init; } = 0;
|
|
|
+ public int PostDailyPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("댓글 일일 횟수 상한")]
|
|
|
- public int CommentDailyCount { get; init; } = 0;
|
|
|
+ public int CommentDailyCount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("댓글 일일 경험치 상한")]
|
|
|
- public int CommentDailyExp { get; init; } = 0;
|
|
|
+ public int CommentDailyExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("댓글 일일 토큰 상한")]
|
|
|
- public int CommentDailyPoint { get; init; } = 0;
|
|
|
+ public int CommentDailyPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(누른 쪽) 일일 횟수 상한")]
|
|
|
- public int LikeGivenDailyCount { get; init; } = 0;
|
|
|
+ public int LikeGivenDailyCount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(누른 쪽) 일일 경험치 상한")]
|
|
|
- public int LikeGivenDailyExp { get; init; } = 0;
|
|
|
+ public int LikeGivenDailyExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(받은 쪽) 일일 횟수 상한")]
|
|
|
- public int LikeReceivedDailyCount { get; init; } = 0;
|
|
|
+ public int LikeReceivedDailyCount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("추천(받은 쪽) 일일 토큰 상한")]
|
|
|
- public int LikeReceivedDailyPoint { get; init; } = 0;
|
|
|
+ public int LikeReceivedDailyPoint { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("채팅 일일 횟수 상한")]
|
|
|
- public int ChatDailyCount { get; init; } = 0;
|
|
|
+ public int ChatDailyCount { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("채팅 일일 경험치 상한")]
|
|
|
- public int ChatDailyExp { get; init; } = 0;
|
|
|
+ public int ChatDailyExp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 100)]
|
|
|
[DisplayName("응원 수수료율(%)")]
|
|
|
- public int CheerFeePercent { get; init; } = 20;
|
|
|
+ public int CheerFeePercent { get; set; } = 20;
|
|
|
|
|
|
[Range(0, 100000000)]
|
|
|
[DisplayName("응원 최소 금액")]
|
|
|
- public int CheerMinAmount { get; init; } = 100;
|
|
|
+ public int CheerMinAmount { get; set; } = 100;
|
|
|
|
|
|
[Range(0, 2000000000)]
|
|
|
[DisplayName("응원 일일 발신 총액 상한(0=무제한)")]
|
|
|
- public int CheerDailyMax { get; init; } = 0;
|
|
|
+ public int CheerDailyMax { get; set; } = 0;
|
|
|
}
|
|
|
|
|
|
// 모의투자 설정 (Paper) — d4 §④
|
|
|
public sealed class PaperConfigDto
|
|
|
{
|
|
|
[DisplayName("모의투자 활성화")]
|
|
|
- public bool Enabled { get; init; } = true;
|
|
|
+ public bool Enabled { get; set; } = true;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("매매 수수료(Bp)")]
|
|
|
- public int FeeRateBp { get; init; } = 15;
|
|
|
+ public int FeeRateBp { get; set; } = 15;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("거래세(Bp)")]
|
|
|
- public int TaxRateBp { get; init; } = 18;
|
|
|
+ public int TaxRateBp { get; set; } = 18;
|
|
|
|
|
|
[Range(0, 1000000000)]
|
|
|
[DisplayName("최소 입금 토큰")]
|
|
|
- public int MinDeposit { get; init; } = 10000;
|
|
|
+ public int MinDeposit { get; set; } = 10000;
|
|
|
|
|
|
[Range(0, 2000000000)]
|
|
|
[DisplayName("최대 보유 토큰(0=무제한)")]
|
|
|
- public int MaxHolding { get; init; } = 0;
|
|
|
+ public int MaxHolding { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 10000)]
|
|
|
[DisplayName("출금 수익 소각(Bp, 0=사용안함)")]
|
|
|
- public int WithdrawProfitBurnBp { get; init; } = 0;
|
|
|
+ public int WithdrawProfitBurnBp { get; set; } = 0;
|
|
|
|
|
|
[Range(0, 10000)]
|
|
|
[DisplayName("1주문 상한(Bp, 3000=30%)")]
|
|
|
- public int OrderMaxPctBp { get; init; } = 3000;
|
|
|
+ public int OrderMaxPctBp { get; set; } = 3000;
|
|
|
|
|
|
[Range(0, 100000)]
|
|
|
[DisplayName("리더보드 등재 최소 체결수")]
|
|
|
- public int MinFillsForRank { get; init; } = 3;
|
|
|
+ public int MinFillsForRank { get; set; } = 3;
|
|
|
}
|
|
|
|
|
|
public static Request From(Get.Response src) => new()
|