Handler.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. ChangePasswordDay = config.Account.ChangePasswordDay,
  99. IsLoginEmailVerifiedOnly = config.Account.IsLoginEmailVerifiedOnly,
  100. MaxLoginTryCount = config.Account.MaxLoginTryCount,
  101. MaxLoginTryLimitSecond = config.Account.MaxLoginTryLimitSecond
  102. },
  103. EmailTemplate = new Response.EmailTemplateConfigDto
  104. {
  105. RegisterEmailFormTitle = config.EmailTemplate.RegisterEmailFormTitle,
  106. RegisterEmailFormContent = config.EmailTemplate.RegisterEmailFormContent,
  107. RegistrationEmailFormTitle = config.EmailTemplate.RegistrationEmailFormTitle,
  108. RegistrationEmailFormContent = config.EmailTemplate.RegistrationEmailFormContent,
  109. ResetPasswordEmailFormTitle = config.EmailTemplate.ResetPasswordEmailFormTitle,
  110. ResetPasswordEmailFormContent = config.EmailTemplate.ResetPasswordEmailFormContent,
  111. ChangedPasswordEmailFormTitle = config.EmailTemplate.ChangedPasswordEmailFormTitle,
  112. ChangedPasswordEmailFormContent = config.EmailTemplate.ChangedPasswordEmailFormContent,
  113. WithdrawEmailFormTitle = config.EmailTemplate.WithdrawEmailFormTitle,
  114. WithdrawEmailFormContent = config.EmailTemplate.WithdrawEmailFormContent,
  115. WithdrawVerifyEmailFormTitle = config.EmailTemplate.WithdrawVerifyEmailFormTitle,
  116. WithdrawVerifyEmailFormContent = config.EmailTemplate.WithdrawVerifyEmailFormContent,
  117. EmailVerifyFormTitle = config.EmailTemplate.EmailVerifyFormTitle,
  118. EmailVerifyFormContent = config.EmailTemplate.EmailVerifyFormContent,
  119. ChangedEmailFormTitle = config.EmailTemplate.ChangedEmailFormTitle,
  120. ChangedEmailFormContent = config.EmailTemplate.ChangedEmailFormContent
  121. },
  122. External = new Response.ExternalApiConfigDto
  123. {
  124. YouTubeApiKeyEnc = config.External.YouTubeApiKeyEnc,
  125. YouTubeApiName = config.External.YouTubeApiName,
  126. GoogleClientId = config.External.GoogleClientId,
  127. GoogleClientSecretEnc = config.External.GoogleClientSecretEnc,
  128. GoogleAppId = config.External.GoogleAppId
  129. },
  130. Toss = new Response.TossConfigDto
  131. {
  132. TossPayMode = config.External.TossPayMode,
  133. HasTestClientKey = !string.IsNullOrEmpty(config.External.TossTestClientKeyEnc),
  134. HasTestSecretKey = !string.IsNullOrEmpty(config.External.TossTestSecretKeyEnc),
  135. HasLiveClientKey = !string.IsNullOrEmpty(config.External.TossLiveClientKeyEnc),
  136. HasLiveSecretKey = !string.IsNullOrEmpty(config.External.TossLiveSecretKeyEnc)
  137. },
  138. Attendance = new Response.AttendanceConfigDto
  139. {
  140. IsEnabled = config.Attendance.IsEnabled,
  141. BaseExp = config.Attendance.BaseExp,
  142. BasePoint = config.Attendance.BasePoint,
  143. UseStreakBonus = config.Attendance.UseStreakBonus,
  144. StreakBonusPerDay = config.Attendance.StreakBonusPerDay,
  145. StreakBonusPointPerDay = config.Attendance.StreakBonusPointPerDay,
  146. StreakBonusMaxDays = config.Attendance.StreakBonusMaxDays,
  147. UseRankBonus = config.Attendance.UseRankBonus,
  148. RankBonusConfig = config.Attendance.RankBonusConfig
  149. },
  150. SignupReward = new Response.SignupRewardConfigDto
  151. {
  152. Enabled = config.SignupReward.Enabled,
  153. CoinAmount = config.SignupReward.CoinAmount,
  154. CashAmount = config.SignupReward.CashAmount,
  155. ExpAmount = config.SignupReward.ExpAmount
  156. }
  157. };
  158. await cache.SetAsync(CacheKeys.Config, response, ct);
  159. return response;
  160. }
  161. }