using MediatR; using TakeoutSaaS.Application.App.Payments.Dto; using TakeoutSaaS.Application.App.Payments.Queries; using TakeoutSaaS.Domain.Payments.Repositories; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Payments.Handlers; /// /// 支付记录列表查询处理器。 /// public sealed class SearchPaymentsQueryHandler( IPaymentRepository paymentRepository, ITenantProvider tenantProvider) : IRequestHandler> { private readonly IPaymentRepository _paymentRepository = paymentRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// public async Task> Handle(SearchPaymentsQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var payments = await _paymentRepository.SearchAsync(tenantId, request.Status, cancellationToken); if (request.OrderId.HasValue) { payments = payments.Where(x => x.OrderId == request.OrderId.Value).ToList(); } return payments.Select(payment => new PaymentDto { Id = payment.Id, TenantId = payment.TenantId, OrderId = payment.OrderId, Method = payment.Method, Status = payment.Status, Amount = payment.Amount, TradeNo = payment.TradeNo, ChannelTransactionId = payment.ChannelTransactionId, PaidAt = payment.PaidAt, Remark = payment.Remark, Payload = payment.Payload }).ToList(); } }