using CMSMicroservice.Application.Common.Authorization; using CMSMicroservice.Protobuf.Protos.ManualPayment; using CMSMicroservice.WebApi.Common.Services; using CMSMicroservice.Application.ManualPaymentCQ.Commands.CreateManualPayment; using CMSMicroservice.Application.ManualPaymentCQ.Commands.ApproveManualPayment; using CMSMicroservice.Application.ManualPaymentCQ.Commands.RejectManualPayment; using CMSMicroservice.Application.ManualPaymentCQ.Commands.ProcessManualMembershipPayment; using CMSMicroservice.Application.ManualPaymentCQ.Queries.GetAllManualPayments; using Grpc.Core; using Mapster; using MediatR; namespace CMSMicroservice.WebApi.Services; public class ManualPaymentService : ManualPaymentContract.ManualPaymentContractBase { private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS; private readonly ISender _sender; public ManualPaymentService( IDispatchRequestToCQRS dispatchRequestToCQRS, ISender sender) { _dispatchRequestToCQRS = dispatchRequestToCQRS; _sender = sender; } [RequiresPermission(PermissionNames.ManualPaymentsCreate)] public override async Task CreateManualPayment( CreateManualPaymentRequest request, ServerCallContext context) { var command = request.Adapt(); var id = await _sender.Send(command, context.CancellationToken); return new CreateManualPaymentResponse { Id = id }; } [RequiresPermission(PermissionNames.ManualPaymentsApprove)] public override async Task ApproveManualPayment( ApproveManualPaymentRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } [RequiresPermission(PermissionNames.ManualPaymentsApprove)] public override async Task RejectManualPayment( RejectManualPaymentRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } [RequiresPermission(PermissionNames.ManualPaymentsView)] public override async Task GetAllManualPayments( GetAllManualPaymentsRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } [RequiresPermission(PermissionNames.ManualPaymentsCreate)] public override async Task ProcessManualMembershipPayment( ProcessManualMembershipPaymentRequest request, ServerCallContext context) { var command = new ProcessManualMembershipPaymentCommand { UserId = request.UserId, Amount = request.Amount, ReferenceNumber = request.ReferenceNumber, Description = request.Description }; var result = await _sender.Send(command, context.CancellationToken); return new ProcessManualMembershipPaymentResponse { TransactionId = result.TransactionId, OrderId = result.OrderId, NewWalletBalance = result.NewWalletBalance, Message = result.Message }; } }