Handler.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Api.Paper.GetLedger;
  5. internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var accountID = await db.PaperAccount.AsNoTracking().Where(c => c.MemberID == request.MemberID).Select(c => (int?)c.ID).FirstOrDefaultAsync(ct);
  10. if (accountID is null)
  11. {
  12. return new Response(0, []);
  13. }
  14. var query = db.PaperLedger.AsNoTracking().Where(c => c.AccountID == accountID.Value);
  15. var total = await query.CountAsync(ct);
  16. var list = await query
  17. .OrderByDescending(c => c.ID)
  18. .Skip((request.Page - 1) * request.PerPage)
  19. .Take(request.PerPage)
  20. .Select(c => new Response.Row(
  21. c.ID,
  22. c.Type,
  23. c.TokenAmount,
  24. c.UnitsDelta,
  25. c.BalanceAfter,
  26. c.CreatedAt
  27. ))
  28. .ToListAsync(ct);
  29. return new Response(total, list);
  30. }
  31. }