Handler.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.Member.Items.List;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var query = db.MemberItem.AsNoTracking()
  10. .Include(i => i.Product)
  11. .Where(i => i.MemberID == request.MemberID && i.RevokedAt == null);
  12. if (!request.IncludeUsed)
  13. {
  14. query = query.Where(i => i.UsedAt == null);
  15. }
  16. var total = await query.CountAsync(ct);
  17. var list = await query
  18. .OrderByDescending(i => i.ID)
  19. .Skip((request.Page - 1) * request.PerPage)
  20. .Take(request.PerPage)
  21. .Select(i => new Response.Row(
  22. i.ID,
  23. i.ProductID,
  24. i.Product!.Name,
  25. i.Product.Thumbnail,
  26. i.Kind,
  27. i.DurationDays,
  28. i.AcquiredAt,
  29. i.UsedAt
  30. ))
  31. .ToListAsync(ct);
  32. return new Response(total, list);
  33. }
  34. }