classlib/ExpenseTracker.Application/Transactions/Queries/GetWithPagination/GetTransactionsWithPaginationQueryHandler.cs
2024-08-07 21:12:02 +03:00

43 lines
1.5 KiB
C#

using AutoMapper;
using MediatR;
using ExpenseTracker.Application.Common.Extensions;
using ExpenseTracker.Application.Common.Interfaces.Repositories;
using ExpenseTracker.Application.Common.Models;
using ExpenseTracker.Domain.Entities;
namespace ExpenseTracker.Application.Transactions.Queries.GetWithPagination;
public class GetTransactionsWithPaginationQueryHandler : IRequestHandler<GetTransactionsWithPaginationQuery, PaginatedList<TransactionDto>>
{
private readonly IMapper _mapper;
private readonly ITransactionRepository _transactionRepository;
public GetTransactionsWithPaginationQueryHandler(
IMapper mapper,
ITransactionRepository repository)
{
_mapper = mapper;
_transactionRepository = repository;
}
public async Task<PaginatedList<TransactionDto>> Handle(
GetTransactionsWithPaginationQuery request,
CancellationToken cancellationToken)
{
// TODO: This is unoptimized. Pagination is being applied
// on the side of the application
// and not on the side of the database
Func<Transaction, DateTimeOffset> func = t => t.Time;
var entities = _transactionRepository.Queryable
.Where(e => e.AccountId == request.AccountId)
.OrderByDescending(func)
.AsQueryable();
return entities
.ProjectToPaginatedList<Transaction, TransactionDto>(request.PageNumber, request.PageSize, _mapper.ConfigurationProvider);
}
}