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