Handler.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using Application.Abstractions.Cache;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Api.Popup.Position.GetActive;
  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.PopupPositionActive, ct);
  11. if (cached is not null)
  12. {
  13. return cached;
  14. }
  15. var rows = await db.PopupPosition
  16. .AsNoTracking()
  17. .Where(c => c.IsActive)
  18. .OrderBy(c => c.ID)
  19. .Select(c => new Response.Row(
  20. c.ID,
  21. c.Code,
  22. c.Subject
  23. ))
  24. .ToListAsync(ct);
  25. var response = new Response(rows.Count, rows);
  26. await cache.SetAsync(CacheKeys.PopupPositionActive, response, ct);
  27. return response;
  28. }
  29. }