using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; namespace Application.Features.Admin.Payment.Toss.Cancel.Get; public sealed class Handler(IAppDbContext db) : IQueryHandler { public async Task Handle(Query request, CancellationToken ct) { var cancel = await db.TossCancel.AsNoTracking().Include(c => c.Member).FirstOrDefaultAsync(c => c.ID == request.ID, ct) ?? throw new InvalidOperationException("토스 취소 내역을 찾을 수 없습니다."); return new Response { ID = cancel.ID, MemberID = cancel.MemberID, MemberEmail = cancel.Member?.Email ?? string.Empty, MemberName = cancel.Member?.Name, PaymentKey = cancel.PaymentKey, OrderID = cancel.OrderID, CancelAmount = cancel.CancelAmount, CancelReason = cancel.CancelReason, CancelRequester = cancel.CancelRequester, ResponseCode = cancel.ResponseCode, ResponseMessage = cancel.ResponseMessage, Status = cancel.Status, TransactionKey = cancel.TransactionKey, CanceledAt = cancel.CanceledAt, CreatedAt = cancel.CreatedAt, UpdatedAt = cancel.UpdatedAt }; } }