Newer
Older
Warehouse / src / Application / Transactions / GetTransactionsList / GetTransactionsListQuery.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 984 bytes Init
using MyWarehouse.Application.Common.Dependencies.DataAccess;
using MyWarehouse.Application.Common.Dependencies.DataAccess.Repositories.Common;
using MyWarehouse.Domain;

namespace MyWarehouse.Application.Transactions.GetTransactionsList;

public class GetTransactionListQuery : ListQueryModel<TransactionDto>
{
    public TransactionType? Type { get; init; }
}

public class GetTransactionsListQueryHandler : IRequestHandler<GetTransactionListQuery, IListResponseModel<TransactionDto>>
{
    private readonly IUnitOfWork _unitOfWork;

    public GetTransactionsListQueryHandler(IUnitOfWork unitOfWork)
        => _unitOfWork = unitOfWork;

    public async Task<IListResponseModel<TransactionDto>> Handle(GetTransactionListQuery request, CancellationToken cancellationToken)
        => await _unitOfWork.Transactions.GetProjectedListAsync(request,
            additionalFilter: request.Type.HasValue ? x => x.TransactionType == request.Type : null,
            readOnly: true);
}