using BackOffice.BFF.Application.Common.Interfaces; using BackOffice.BFF.ManualPayment.Protobuf; using Google.Protobuf.WellKnownTypes; using MediatR; using Microsoft.Extensions.Logging; namespace BackOffice.BFF.Application.ManualPaymentCQ.Commands.CreateManualPayment; public class CreateManualPaymentCommandHandler : IRequestHandler { private readonly IApplicationContractContext _context; private readonly ILogger _logger; public CreateManualPaymentCommandHandler( IApplicationContractContext context, ILogger logger) { _context = context; _logger = logger; } public async Task Handle(CreateManualPaymentCommand request, CancellationToken cancellationToken) { _logger.LogInformation( "Creating manual payment via BFF for UserId {UserId}, Amount {Amount}, Type {Type}", request.UserId, request.Amount, request.Type); var grpcRequest = new CreateManualPaymentRequest { UserId = request.UserId, Amount = request.Amount, Type = request.Type, Description = request.Description }; if (!string.IsNullOrWhiteSpace(request.ReferenceNumber)) { grpcRequest.ReferenceNumber = request.ReferenceNumber; } var response = await _context.ManualPayments.CreateManualPaymentAsync(grpcRequest, cancellationToken: cancellationToken); return new CreateManualPaymentResponseDto { Id = response.Id }; } }