using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; namespace Application.Features.Api.Paper.GetLedger; internal sealed class Handler(IAppDbContext db) : IQueryHandler { public async Task Handle(Query request, CancellationToken ct) { var accountID = await db.PaperAccount.AsNoTracking().Where(c => c.MemberID == request.MemberID).Select(c => (int?)c.ID).FirstOrDefaultAsync(ct); if (accountID is null) { return new Response(0, []); } var query = db.PaperLedger.AsNoTracking().Where(c => c.AccountID == accountID.Value); var total = await query.CountAsync(ct); var rows = await query .OrderByDescending(c => c.ID) .Skip((request.Page - 1) * request.PerPage) .Take(request.PerPage) .Select(c => new { c.ID, c.Type, c.TokenAmount, c.UnitsDelta, c.BalanceAfter, c.CreatedAt }) .ToListAsync(ct); var list = rows.Select(c => new Response.Row( c.ID, c.Type.ToString(), c.TokenAmount, c.UnitsDelta, c.BalanceAfter, c.CreatedAt )).ToList(); return new Response(total, list); } }