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

48 lines
1.6 KiB
C#

using AutoMapper;
using MediatR;
using ExpenseTracker.Application.Common.Interfaces.Repositories;
using ExpenseTracker.Domain.Entities;
namespace ExpenseTracker.Application.Transactions.Queries.Get;
public class GetTransactionQueryHandler : IRequestHandler<GetTransactionQuery, TransactionDto>
{
private readonly IMapper _mapper;
private readonly ITransactionRepository _transactionRepository;
private readonly IAccountRepository _accountRepository;
public GetTransactionQueryHandler(
IMapper mapper,
ITransactionRepository repository,
IAccountRepository accountRepository)
{
_mapper = mapper;
_transactionRepository = repository;
_accountRepository = accountRepository;
}
public async Task<TransactionDto> Handle(GetTransactionQuery request, CancellationToken cancellationToken)
{
var entity = _transactionRepository.Queryable
.Join(
_accountRepository.Queryable,
t => t.AccountId,
b => b.Id,
(transaction, account) =>
new Transaction
{
Id = transaction.Id,
Amount = transaction.Amount,
Category = transaction.Category,
Time = transaction.Time,
Description = transaction.Description,
Account = account,
AccountId = transaction.AccountId
}
)
.FirstOrDefault(e => e.Id == request.Id);
return _mapper.Map<TransactionDto>(entity);
}
}