Skip to content

Commit fd83c2e

Browse files
committed
Implement Transaction queries
1 parent 64ff1f1 commit fd83c2e

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

Application/Features/Transactions/Queries/GetTransactionByIdQueryHandler.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,39 @@
22
using Application.Common.Interfaces;
33
using Application.Common.Mediator;
44
using Application.Dtos.Transactions;
5+
using Microsoft.EntityFrameworkCore;
56

67
namespace Application.Features.Transactions
78
{
89
public class GetTransactionByIdQueryHandler(IApplicationDbContext context) : IRequestHandler<GetTransactionByIdQuery, Result<TransactionDto>>
910
{
1011
public async Task<Result<TransactionDto>> Handle(GetTransactionByIdQuery request, CancellationToken cancellationToken)
1112
{
12-
throw new NotImplementedException();
13+
var userId = request.UserId;
14+
var transactionId = request.Id;
15+
16+
if (transactionId == Guid.Empty || userId == Guid.Empty)
17+
return Result<TransactionDto>.Failure("Unable to process request, missing IDs.", 400);
18+
19+
var transaction = await context.Transactions
20+
.AsNoTracking()
21+
.FirstOrDefaultAsync(t => t.Id == transactionId && t.UserId == userId, cancellationToken);
22+
23+
if (transaction is null)
24+
return Result<TransactionDto>.Failure("Transaction not found.", 404);
25+
26+
var transactionDto = new TransactionDto
27+
(
28+
Id: transaction.Id,
29+
AccountId: transaction.AccountId,
30+
CategoryId: transaction.CategoryId ?? Guid.Empty,
31+
Amount: transaction.Amount,
32+
Note: transaction.Note,
33+
TransactionDate: transaction.TransactionDate,
34+
Type: transaction.Type
35+
);
36+
37+
return Result<TransactionDto>.Success(transactionDto);
1338
}
1439
}
1540
}
Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,40 @@
11
using Application.Common;
22
using Application.Common.Interfaces;
33
using Application.Common.Mediator;
4+
using Application.Dtos.Accounts;
45
using Application.Dtos.Transactions;
6+
using Microsoft.EntityFrameworkCore;
57

68
namespace Application.Features.Transactions
79
{
810
public class GetTransactionsQueryHandler(IApplicationDbContext context) : IRequestHandler<GetTransactionsQuery, Result<List<TransactionDto>>>
911
{
1012
public async Task<Result<List<TransactionDto>>> Handle(GetTransactionsQuery request, CancellationToken cancellationToken)
1113
{
12-
throw new NotImplementedException();
14+
var userId = request.UserId;
15+
16+
if (userId == Guid.Empty)
17+
return Result<List<TransactionDto>>.Failure("Unable to process request, User ID is not provided.", 400);
18+
19+
var transactions = await context.Transactions
20+
.Where(t => t.UserId == userId)
21+
.Select(a => new TransactionDto
22+
(
23+
a.Id,
24+
a.AccountId,
25+
a.CategoryId ?? Guid.Empty,
26+
a.Amount,
27+
a.Note,
28+
a.TransactionDate,
29+
a.Type
30+
))
31+
.AsNoTracking()
32+
.ToListAsync(cancellationToken);
33+
34+
if (transactions is null || transactions.Count == 0)
35+
return Result<List<TransactionDto>>.Failure("No transactions found for the specified user.", 404);
36+
37+
return Result<List<TransactionDto>>.Success(transactions);
1338
}
1439
}
1540
}

0 commit comments

Comments
 (0)