Handler.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Application.Abstractions.Messaging;
  2. using SharedKernel.Extensions;
  3. using Application.Abstractions.Data;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Popup.Search;
  6. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  7. {
  8. public async Task<Response> Handle(Query request, CancellationToken ct)
  9. {
  10. var query = db.Popup.AsNoTracking();
  11. var total = await query.CountAsync(ct);
  12. var skip = (request.PageNum - 1) * request.PerPage;
  13. var list = await query
  14. .OrderByDescending(x => x.ID)
  15. .Skip(skip)
  16. .Take(request.PerPage)
  17. .Select(x => new
  18. {
  19. x.ID,
  20. x.Subject,
  21. x.Link,
  22. x.StartAt,
  23. x.EndAt,
  24. x.Order,
  25. x.IsActive,
  26. x.UpdatedAt,
  27. x.CreatedAt
  28. })
  29. .ToListAsync(ct);
  30. var rows = list
  31. .Select((x, idx) => new Response.Row
  32. {
  33. Num = total - skip - idx,
  34. ID = x.ID,
  35. Subject = x.Subject,
  36. Link = x.Link,
  37. StartAt = x.StartAt?.ToString("yyyy-MM-dd HH:mm"),
  38. EndAt = x.EndAt?.ToString("yyyy-MM-dd HH:mm"),
  39. Order = x.Order,
  40. IsActive = x.IsActive,
  41. UpdatedAt = x.UpdatedAt.GetDateAt(),
  42. CreatedAt = x.CreatedAt.GetDateAt()
  43. })
  44. .ToList();
  45. return new Response
  46. {
  47. Total = total,
  48. List = rows
  49. };
  50. }
  51. }