Handler.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. },
  131. Toss = new Response.TossConfigDto
  132. {
  133. TossPayMode = config.External.TossPayMode,
  134. HasTestClientKey = !string.IsNullOrEmpty(config.External.TossTestClientKeyEnc),
  135. HasTestSecretKey = !string.IsNullOrEmpty(config.External.TossTestSecretKeyEnc),
  136. HasLiveClientKey = !string.IsNullOrEmpty(config.External.TossLiveClientKeyEnc),
  137. HasLiveSecretKey = !string.IsNullOrEmpty(config.External.TossLiveSecretKeyEnc)
  138. },
  139. Attendance = new Response.AttendanceConfigDto
  140. {
  141. IsEnabled = config.Attendance.IsEnabled,
  142. BaseExp = config.Attendance.BaseExp,
  143. BasePoint = config.Attendance.BasePoint,
  144. UseStreakBonus = config.Attendance.UseStreakBonus,
  145. StreakBonusPerDay = config.Attendance.StreakBonusPerDay,
  146. StreakBonusPointPerDay = config.Attendance.StreakBonusPointPerDay,
  147. StreakBonusMaxDays = config.Attendance.StreakBonusMaxDays,
  148. UseRankBonus = config.Attendance.UseRankBonus,
  149. RankBonusConfig = config.Attendance.RankBonusConfig
  150. },
  151. SignupReward = new Response.SignupRewardConfigDto
  152. {
  153. Enabled = config.SignupReward.Enabled,
  154. CoinAmount = config.SignupReward.CoinAmount,
  155. CashAmount = config.SignupReward.CashAmount,
  156. ExpAmount = config.SignupReward.ExpAmount
  157. },
  158. ActivityToken = new Response.ActivityTokenConfigDto
  159. {
  160. PostToken = config.ActivityToken.PostToken,
  161. CommentToken = config.ActivityToken.CommentToken,
  162. DailyTokenCap = config.ActivityToken.DailyTokenCap
  163. },
  164. Paper = new Response.PaperConfigDto
  165. {
  166. Enabled = config.Paper.Enabled,
  167. FeeRateBp = config.Paper.FeeRateBp,
  168. TaxRateBp = config.Paper.TaxRateBp,
  169. MinDeposit = config.Paper.MinDeposit,
  170. MaxHolding = config.Paper.MaxHolding,
  171. WithdrawProfitBurnBp = config.Paper.WithdrawProfitBurnBp,
  172. OrderMaxPctBp = config.Paper.OrderMaxPctBp,
  173. MinFillsForRank = config.Paper.MinFillsForRank
  174. }
  175. };
  176. await cache.SetAsync(CacheKeys.Config, response, ct);
  177. return response;
  178. }
  179. }