43 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|