Handler.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using Microsoft.EntityFrameworkCore;
  4. using Application.Abstractions.Cache;
  5. namespace Application.Features.Config.Get;
  6. public sealed class Handler(IAppDbContext db, ICacheService cache) : IQueryHandler<Query, Response?>
  7. {
  8. public async Task<Response?> Handle(Query request, CancellationToken ct)
  9. {
  10. var cached = await cache.GetAsync<Response>(CacheKeys.Config, ct);
  11. if (cached is not null)
  12. {
  13. return cached;
  14. }
  15. var config = await db.Config.AsNoTracking().OrderByDescending(x => x.ID).FirstOrDefaultAsync(ct);
  16. if (config is null)
  17. {
  18. return null;
  19. }
  20. var response = new Response
  21. {
  22. ID = config.ID,
  23. Basic = new Response.BasicConfigDto
  24. {
  25. SiteName = config.Basic.SiteName,
  26. SiteURL = config.Basic.SiteURL,
  27. RootID = config.Basic.RootID,
  28. FromEmail = config.Basic.FromEmail,
  29. FromName = config.Basic.FromName,
  30. SmtpServer = config.Basic.SmtpServer,
  31. SmtpPort = config.Basic.SmtpPort,
  32. SmtpEnableSSL = config.Basic.SmtpEnableSSL,
  33. SmtpUsername = config.Basic.SmtpUsername,
  34. SmtpPassword = config.Basic.SmtpPassword,
  35. AdminWhiteIPList = config.Basic.AdminWhiteIPList,
  36. FrontWhiteIPList = config.Basic.FrontWhiteIPList,
  37. BlockAlertTitle = config.Basic.BlockAlertTitle,
  38. BlockAlertContent = config.Basic.BlockAlertContent,
  39. IsMaintenance = config.Basic.IsMaintenance,
  40. MaintenanceContent = config.Basic.MaintenanceContent,
  41. NoteDailySendLimit = config.Basic.NoteDailySendLimit
  42. },
  43. Images = new Response.ImagesConfigDto
  44. {
  45. FaviconPath = config.Images.Favicon,
  46. LogoSquarePath = config.Images.LogoSquare,
  47. LogoHorizontalPath = config.Images.LogoHorizontal,
  48. OgDefaultPath = config.Images.OgDefault,
  49. TwitterImagePath = config.Images.TwitterImage,
  50. AppleTouchIconPath = config.Images.AppleTouchIcon,
  51. AppIcon192Path = config.Images.AppIcon_192,
  52. AppIcon512Path = config.Images.AppIcon_512
  53. },
  54. Meta = new Response.MetaConfigDto
  55. {
  56. Keywords = config.Meta.Keywords,
  57. Description = config.Meta.Description,
  58. Author = config.Meta.Author,
  59. Viewport = config.Meta.Viewport,
  60. ApplicationName = config.Meta.ApplicationName,
  61. Generator = config.Meta.Generator,
  62. Robots = config.Meta.Robots,
  63. Adds = config.Meta.Adds
  64. },
  65. Company = new Response.CompanyConfigDto
  66. {
  67. Name = config.Company.Name,
  68. RegNo = config.Company.RegNo,
  69. Address = config.Company.Address,
  70. ZipCode = config.Company.ZipCode,
  71. Owner = config.Company.Owner,
  72. Tel = config.Company.Tel,
  73. Fax = config.Company.Fax,
  74. RetailSaleNo = config.Company.RetailSaleNo,
  75. AddedSaleNo = config.Company.AddedSaleNo,
  76. Hosting = config.Company.Hosting,
  77. AdminName = config.Company.AdminName,
  78. AdminEmail = config.Company.AdminEmail,
  79. SiteUrl = config.Company.SiteUrl,
  80. BankCode = config.Company.BankCode,
  81. BankOwner = config.Company.BankOwner,
  82. BankNumber = config.Company.BankNumber
  83. },
  84. Account = new Response.AccountConfigDto
  85. {
  86. IsRegisterBlock = config.Account.IsRegisterBlock,
  87. IsRegisterEmailAuth = config.Account.IsRegisterEmailAuth,
  88. PasswordMinLength = config.Account.PasswordMinLength,
  89. PasswordUppercaseLength = config.Account.PasswordUppercaseLength,
  90. PasswordNumbersLength = config.Account.PasswordNumbersLength,
  91. PasswordSpecialcharsLength = config.Account.PasswordSpecialcharsLength,
  92. DeniedEmailList = config.Account.DeniedEmailList,
  93. DeniedNameList = config.Account.DeniedNameList,
  94. ChangeEmailDay = config.Account.ChangeEmailDay,
  95. ChangeNameDay = config.Account.ChangeNameDay,
  96. ChangeSummaryDay = config.Account.ChangeSummaryDay,
  97. ChangeIntroDay = config.Account.ChangeIntroDay,
  98. ChangeThumbDay = config.Account.ChangeThumbDay,
  99. ChangePasswordDay = config.Account.ChangePasswordDay,
  100. IsLoginEmailVerifiedOnly = config.Account.IsLoginEmailVerifiedOnly,
  101. MaxLoginTryCount = config.Account.MaxLoginTryCount,
  102. MaxLoginTryLimitSecond = config.Account.MaxLoginTryLimitSecond
  103. },
  104. EmailTemplate = new Response.EmailTemplateConfigDto
  105. {
  106. RegisterEmailFormTitle = config.EmailTemplate.RegisterEmailFormTitle,
  107. RegisterEmailFormContent = config.EmailTemplate.RegisterEmailFormContent,
  108. RegistrationEmailFormTitle = config.EmailTemplate.RegistrationEmailFormTitle,
  109. RegistrationEmailFormContent = config.EmailTemplate.RegistrationEmailFormContent,
  110. ResetPasswordEmailFormTitle = config.EmailTemplate.ResetPasswordEmailFormTitle,
  111. ResetPasswordEmailFormContent = config.EmailTemplate.ResetPasswordEmailFormContent,
  112. ChangedPasswordEmailFormTitle = config.EmailTemplate.ChangedPasswordEmailFormTitle,
  113. ChangedPasswordEmailFormContent = config.EmailTemplate.ChangedPasswordEmailFormContent,
  114. WithdrawEmailFormTitle = config.EmailTemplate.WithdrawEmailFormTitle,
  115. WithdrawEmailFormContent = config.EmailTemplate.WithdrawEmailFormContent,
  116. WithdrawVerifyEmailFormTitle = config.EmailTemplate.WithdrawVerifyEmailFormTitle,
  117. WithdrawVerifyEmailFormContent = config.EmailTemplate.WithdrawVerifyEmailFormContent,
  118. EmailVerifyFormTitle = config.EmailTemplate.EmailVerifyFormTitle,
  119. EmailVerifyFormContent = config.EmailTemplate.EmailVerifyFormContent,
  120. ChangedEmailFormTitle = config.EmailTemplate.ChangedEmailFormTitle,
  121. ChangedEmailFormContent = config.EmailTemplate.ChangedEmailFormContent
  122. },
  123. External = new Response.ExternalApiConfigDto
  124. {
  125. YouTubeApiKeyEnc = config.External.YouTubeApiKeyEnc,
  126. YouTubeApiName = config.External.YouTubeApiName,
  127. GoogleClientId = config.External.GoogleClientId,
  128. GoogleClientSecretEnc = config.External.GoogleClientSecretEnc,
  129. GoogleAppId = config.External.GoogleAppId,
  130. NaverClientId = config.External.NaverClientId,
  131. HasNaverClientSecret = !string.IsNullOrEmpty(config.External.NaverClientSecretEnc),
  132. HasKakaoRestApiKey = !string.IsNullOrEmpty(config.External.KakaoRestApiKeyEnc),
  133. KakaoJavascriptKey = config.External.KakaoJavascriptKey,
  134. HasKakaoAdminKey = !string.IsNullOrEmpty(config.External.KakaoAdminKeyEnc),
  135. NaverSearchClientId = config.External.NaverSearchClientId,
  136. HasNaverSearchClientSecret = !string.IsNullOrEmpty(config.External.NaverSearchClientSecretEnc)
  137. },
  138. Toss = new Response.TossConfigDto
  139. {
  140. TossPayMode = config.External.TossPayMode,
  141. HasTestClientKey = !string.IsNullOrEmpty(config.External.TossTestClientKeyEnc),
  142. HasTestSecretKey = !string.IsNullOrEmpty(config.External.TossTestSecretKeyEnc),
  143. HasLiveClientKey = !string.IsNullOrEmpty(config.External.TossLiveClientKeyEnc),
  144. HasLiveSecretKey = !string.IsNullOrEmpty(config.External.TossLiveSecretKeyEnc)
  145. },
  146. Attendance = new Response.AttendanceConfigDto
  147. {
  148. IsEnabled = config.Attendance.IsEnabled,
  149. BaseExp = config.Attendance.BaseExp,
  150. BasePoint = config.Attendance.BasePoint,
  151. UseStreakBonus = config.Attendance.UseStreakBonus,
  152. StreakBonusPerDay = config.Attendance.StreakBonusPerDay,
  153. StreakBonusPointPerDay = config.Attendance.StreakBonusPointPerDay,
  154. StreakBonusMaxDays = config.Attendance.StreakBonusMaxDays,
  155. UseRankBonus = config.Attendance.UseRankBonus,
  156. RankBonusConfig = config.Attendance.RankBonusConfig
  157. },
  158. SignupReward = new Response.SignupRewardConfigDto
  159. {
  160. Enabled = config.SignupReward.Enabled,
  161. CoinAmount = config.SignupReward.CoinAmount,
  162. CashAmount = config.SignupReward.CashAmount,
  163. ExpAmount = config.SignupReward.ExpAmount
  164. },
  165. Reward = new Response.RewardConfigDto
  166. {
  167. PostExp = config.Reward.PostExp,
  168. PostPoint = config.Reward.PostPoint,
  169. CommentExp = config.Reward.CommentExp,
  170. CommentPoint = config.Reward.CommentPoint,
  171. LikeGivenExp = config.Reward.LikeGivenExp,
  172. LikeReceivedPoint = config.Reward.LikeReceivedPoint,
  173. MinPostLength = config.Reward.MinPostLength,
  174. MinCommentLength = config.Reward.MinCommentLength,
  175. NewMemberHoldDays = config.Reward.NewMemberHoldDays,
  176. PostDailyCount = config.Reward.PostDailyCount,
  177. PostDailyExp = config.Reward.PostDailyExp,
  178. PostDailyPoint = config.Reward.PostDailyPoint,
  179. CommentDailyCount = config.Reward.CommentDailyCount,
  180. CommentDailyExp = config.Reward.CommentDailyExp,
  181. CommentDailyPoint = config.Reward.CommentDailyPoint,
  182. LikeGivenDailyCount = config.Reward.LikeGivenDailyCount,
  183. LikeGivenDailyExp = config.Reward.LikeGivenDailyExp,
  184. LikeReceivedDailyCount = config.Reward.LikeReceivedDailyCount,
  185. LikeReceivedDailyPoint = config.Reward.LikeReceivedDailyPoint,
  186. ChatDailyCount = config.Reward.ChatDailyCount,
  187. ChatDailyExp = config.Reward.ChatDailyExp,
  188. CheerFeePercent = config.Reward.CheerFeePercent,
  189. CheerMinAmount = config.Reward.CheerMinAmount,
  190. CheerDailyMax = config.Reward.CheerDailyMax
  191. },
  192. Paper = new Response.PaperConfigDto
  193. {
  194. Enabled = config.Paper.Enabled,
  195. FeeRateBp = config.Paper.FeeRateBp,
  196. TaxRateBp = config.Paper.TaxRateBp,
  197. MinDeposit = config.Paper.MinDeposit,
  198. MaxHolding = config.Paper.MaxHolding,
  199. WithdrawProfitBurnBp = config.Paper.WithdrawProfitBurnBp,
  200. OrderMaxPctBp = config.Paper.OrderMaxPctBp,
  201. MinFillsForRank = config.Paper.MinFillsForRank
  202. },
  203. DataCollection = new Response.DataCollectionConfigDto
  204. {
  205. HasDataGoKrServiceKey = !string.IsNullOrEmpty(config.DataCollection.DataGoKrServiceKeyEnc),
  206. HasKrxApiKey = !string.IsNullOrEmpty(config.DataCollection.KrxApiKeyEnc),
  207. HasOpenDartApiKey = !string.IsNullOrEmpty(config.DataCollection.OpenDartApiKeyEnc),
  208. HasKoreaEximExchangeKey = !string.IsNullOrEmpty(config.DataCollection.KoreaEximExchangeKeyEnc),
  209. HasKoreaEximLoanRateKey = !string.IsNullOrEmpty(config.DataCollection.KoreaEximLoanRateKeyEnc),
  210. HasKoreaEximIntlRateKey = !string.IsNullOrEmpty(config.DataCollection.KoreaEximIntlRateKeyEnc),
  211. HasSeibroApiKey = !string.IsNullOrEmpty(config.DataCollection.SeibroApiKeyEnc),
  212. HasKosisApiKey = !string.IsNullOrEmpty(config.DataCollection.KosisApiKeyEnc),
  213. StockDataMasterSync = config.DataCollection.StockDataMasterSync,
  214. StockDataDailyPriceSync = config.DataCollection.StockDataDailyPriceSync,
  215. KrxIndexSync = config.DataCollection.KrxIndexSync,
  216. KrxBondIndexSync = config.DataCollection.KrxBondIndexSync,
  217. KrxStockSync = config.DataCollection.KrxStockSync,
  218. KrxEtpSync = config.DataCollection.KrxEtpSync,
  219. KrxWarrantSync = config.DataCollection.KrxWarrantSync,
  220. KrxBondSync = config.DataCollection.KrxBondSync,
  221. KrxDerivativeSync = config.DataCollection.KrxDerivativeSync,
  222. KrxCommoditySync = config.DataCollection.KrxCommoditySync,
  223. KrxEsgSync = config.DataCollection.KrxEsgSync,
  224. OpenDartDisclosureSync = config.DataCollection.OpenDartDisclosureSync,
  225. KoreaEximMacroSync = config.DataCollection.KoreaEximMacroSync,
  226. KosisSync = config.DataCollection.KosisSync,
  227. WorldIndexEnabled = config.DataCollection.WorldIndexEnabled,
  228. MarketQuoteEnabled = config.DataCollection.MarketQuoteEnabled,
  229. SeibroIssuerSync = config.DataCollection.SeibroIssuerSync,
  230. SeibroDividendSync = config.DataCollection.SeibroDividendSync,
  231. SeibroSupplySync = config.DataCollection.SeibroSupplySync,
  232. SeibroCorpActionSync = config.DataCollection.SeibroCorpActionSync,
  233. SeibroBondSync = config.DataCollection.SeibroBondSync,
  234. SeibroDerivSync = config.DataCollection.SeibroDerivSync,
  235. SeibroForeignSync = config.DataCollection.SeibroForeignSync
  236. }
  237. };
  238. await cache.SetAsync(CacheKeys.Config, response, ct);
  239. return response;
  240. }
  241. }