Handler.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Admin.Crypto.News.Source.Search
  5. {
  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.RssFeedSource.AsNoTracking().AsQueryable();
  11. var total = await query.CountAsync(ct);
  12. var list = await query
  13. .OrderByDescending(c => c.ID)
  14. .Skip((request.PageNum - 1) * request.PerPage)
  15. .Take(request.PerPage)
  16. .Select(c => new
  17. {
  18. c.ID,
  19. c.Name,
  20. c.Url,
  21. c.Description,
  22. c.IntervalMinutes,
  23. c.IsActive,
  24. c.LastFetchedAt,
  25. c.CreatedAt
  26. })
  27. .ToListAsync(ct);
  28. var startNum = total - ((request.PageNum - 1) * request.PerPage);
  29. return new Response(
  30. total,
  31. [..list.Select((c, i) => new Response.Row(
  32. Num: startNum - i,
  33. c.ID,
  34. c.Name,
  35. c.Url,
  36. c.Description,
  37. c.IntervalMinutes,
  38. c.IsActive,
  39. c.LastFetchedAt,
  40. c.CreatedAt
  41. ))]
  42. );
  43. }
  44. }
  45. }