public async Task <PaymentStatusUpdateErrorCodes> RejectByCustomerAsync(string paymentRequestId, string customerId) { if (string.IsNullOrEmpty(paymentRequestId)) { throw new ArgumentNullException(nameof(paymentRequestId)); } if (string.IsNullOrEmpty(customerId)) { throw new ArgumentNullException(nameof(customerId)); } return(await _transactionScopeHandler.WithTransactionAsync(async() => { var payment = await _paymentsRepository.GetByPaymentRequestIdAsync(paymentRequestId); if (payment == null) { return PaymentStatusUpdateErrorCodes.PaymentDoesNotExist; } if (payment.CustomerId != customerId) { return PaymentStatusUpdateErrorCodes.CustomerIdDoesNotMatch; } if (payment.Status != PaymentRequestStatus.Created) { return PaymentStatusUpdateErrorCodes.PaymentIsInInvalidStatus; } const PaymentRequestStatus newStatus = PaymentRequestStatus.RejectedByCustomer; await _paymentsRepository.SetStatusAsync(paymentRequestId, newStatus); await _statusUpdatePublisher.PublishAsync(new PartnersPaymentStatusUpdatedEvent { PaymentRequestId = paymentRequestId, Status = newStatus.ToContractModel() }); return PaymentStatusUpdateErrorCodes.None; })); }