48 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|