Handler.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.EntityFrameworkCore;
  4. namespace Application.Features.Admin.Payment.Toss.Confirm.Get;
  5. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var confirm = await db.TossConfirm.AsNoTracking().Include(c => c.Member).Include(c => c.PaymentOrder).FirstOrDefaultAsync(c => c.ID == request.ID, ct) ?? throw new InvalidOperationException("토스 결제 내역을 찾을 수 없습니다.");
  10. var cancel = await db.TossCancel.AsNoTracking()
  11. .Where(c => c.PaymentOrderID == confirm.PaymentOrderID && c.ResponseCode == "SUCCESS")
  12. .OrderByDescending(c => c.ID)
  13. .Select(c => new Response.CancelData
  14. {
  15. ID = c.ID,
  16. CancelAmount = c.CancelAmount,
  17. CancelReason = c.CancelReason,
  18. CancelRequester = c.CancelRequester,
  19. Status = c.Status,
  20. TransactionKey = c.TransactionKey,
  21. CanceledAt = c.CanceledAt,
  22. CreatedAt = c.CreatedAt
  23. })
  24. .FirstOrDefaultAsync(ct);
  25. return new Response
  26. {
  27. Confirm = new Response.ConfirmData
  28. {
  29. ID = confirm.ID,
  30. MemberID = confirm.MemberID,
  31. MemberEmail = confirm.Member?.Email ?? string.Empty,
  32. MemberName = confirm.Member?.Name,
  33. PaymentKey = confirm.PaymentKey,
  34. OrderID = confirm.OrderID,
  35. Amount = confirm.Amount,
  36. MerchantID = confirm.PaymentOrder?.MerchantID ?? "TOSS",
  37. OrderStatus = confirm.PaymentOrder != null ? confirm.PaymentOrder.Status : default,
  38. OrderPaidAt = confirm.PaymentOrder?.PaidAt,
  39. OrderCancelledAt = confirm.PaymentOrder?.CancelledAt,
  40. OrderName = confirm.PaymentOrder?.OrderName,
  41. ResponseCode = confirm.ResponseCode,
  42. ResponseMessage = confirm.ResponseMessage,
  43. Status = confirm.Status,
  44. Method = confirm.Method,
  45. TotalAmount = confirm.TotalAmount,
  46. ApprovedAt = confirm.ApprovedAt,
  47. ReceiptUrl = confirm.ReceiptUrl,
  48. VirtualAccountNumber = confirm.PaymentOrder?.VirtualAccountNumber,
  49. VirtualAccountBank = confirm.PaymentOrder?.VirtualAccountBank,
  50. VirtualAccountHolder = confirm.PaymentOrder?.VirtualAccountHolder,
  51. VirtualAccountExpireAt = confirm.PaymentOrder?.VirtualAccountExpireAt,
  52. CreatedAt = confirm.CreatedAt,
  53. UpdatedAt = confirm.UpdatedAt
  54. },
  55. Cancel = cancel
  56. };
  57. }
  58. }