Handler.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using SharedKernel.Results;
  4. using Domain.Entities.Wallets.ValueObject;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace Application.Features.Admin.Member.Wallet.Transactions.Get;
  7. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
  8. {
  9. public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
  10. {
  11. var tx = await db.WalletTransaction.AsNoTracking().Include(x => x.Wallet).ThenInclude(w => w.Member).Include(x => x.Wallet).ThenInclude(w => w.Balances).FirstOrDefaultAsync(x => x.ID == request.Id, ct);
  12. if (tx is null)
  13. {
  14. return Result.Failure<Response>(Error.NotFound("WalletTransaction.NotFound", "거래 내역을 찾을 수 없습니다."));
  15. }
  16. var wallet = tx.Wallet;
  17. return Result.Success(new Response
  18. {
  19. ID = tx.ID,
  20. WalletKey = tx.WalletKey,
  21. WalletID = wallet.ID,
  22. MemberID = wallet.MemberID,
  23. MemberEmail = wallet.Member.Email,
  24. MemberName = wallet.Member.Name,
  25. WalletBalance = (long)wallet.GetTotalAvailable().Value,
  26. WalletDonationBalance = (long)wallet.GetBalance(WalletBalanceType.Donation).Value,
  27. TxType = tx.TxType,
  28. BalanceType = tx.BalanceType,
  29. Amount = (long)tx.Amount.Value,
  30. BalanceAfter = (long)tx.BalanceAfter.Value,
  31. Reason = tx.Reason,
  32. RefID = tx.RefID,
  33. UserID = tx.UserID,
  34. Memo = tx.Memo,
  35. CreatedAt = tx.CreatedAt
  36. });
  37. }
  38. }