Handler.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Cache;
  2. using Application.Abstractions.Data;
  3. using Application.Abstractions.Messaging;
  4. using Domain.Entities.Common;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace Application.Features.Admin.Channel.ExpConfig.Update;
  7. internal sealed class Handler(IAppDbContext db, ICacheService cache) : ICommandHandler<Command>
  8. {
  9. public async Task Handle(Command request, CancellationToken ct)
  10. {
  11. var entity = await db.Config
  12. .OrderByDescending(x => x.ID)
  13. .FirstOrDefaultAsync(ct);
  14. if (entity is null)
  15. {
  16. entity = Domain.Entities.Common.Config.Create();
  17. await db.Config.AddAsync(entity, ct);
  18. }
  19. var chatExp = new ChatExpConfig
  20. {
  21. ChatXpPerMessage = request.ChatXpPerMessage,
  22. DonationXpPerAmount = request.DonationXpPerAmount,
  23. ChatXpSessionLimit = request.ChatXpSessionLimit,
  24. MinContentLength = request.MinContentLength,
  25. RateLimitSec = request.RateLimitSec,
  26. LeaderboardSize = request.LeaderboardSize,
  27. CrownTopN = request.CrownTopN,
  28. UxShowLeaderboard = request.UxShowLeaderboard,
  29. UxShowMyXpBadge = request.UxShowMyXpBadge
  30. };
  31. entity.UpdateChatExp(chatExp);
  32. await db.SaveChangesAsync(ct);
  33. // 캐시 무효화
  34. await cache.RemoveAsync(CacheKeys.Config, ct);
  35. }
  36. }