Handler.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.DonationAlert.GetConfigByToken;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var channelID = await db.Channel
  10. .AsNoTracking()
  11. .Where(c => c.WidgetToken == request.WidgetToken && c.IsActive)
  12. .Select(c => c.ID)
  13. .FirstOrDefaultAsync(ct);
  14. if (channelID == 0)
  15. {
  16. return new Response([]);
  17. }
  18. var list = await db.DonationAlertConfig
  19. .AsNoTracking()
  20. .Where(c => c.ChannelID == channelID && c.IsActive)
  21. .OrderBy(c => c.Amount)
  22. .Select(c => new ConfigItem(
  23. c.ID, c.Title, c.Amount, c.MatchType, c.Message,
  24. c.PlayDelaySec, c.DisplayDurationSec,
  25. c.PopupEffect, c.TextEffect,
  26. c.NicknameFontFamily, c.NicknameFontSize, c.NicknameFontColor,
  27. c.AmountFontFamily, c.AmountFontSize, c.AmountFontColor,
  28. c.MessageFontFamily, c.MessageFontSize, c.MessageFontColor,
  29. c.TemplateFontFamily, c.TemplateFontSize, c.TemplateFontColor,
  30. c.EnableImage, c.ImageUrl,
  31. c.EnableSound, c.SoundUrl,
  32. c.IsActive
  33. ))
  34. .ToListAsync(ct);
  35. return new Response(list);
  36. }
  37. }