using AutoMapper; using MediatR; using ExpenseTracker.Application.Common.Interfaces.Repositories; using ExpenseTracker.Domain.Entities; namespace ExpenseTracker.Application.Transactions.Queries.Get; public class GetTransactionQueryHandler : IRequestHandler { 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 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(entity); } }