public async Task SetStatusAsync(string transferId, PaymentTransferStatus status) { using (var context = _contextFactory.CreateDataContext()) { var entity = new PaymentTransferEntity { TransferId = transferId }; context.PaymentTransfers.Attach(entity); entity.Status = status; try { await context.SaveChangesAsync(); } catch (DbUpdateException) { throw new InvalidOperationException("Entity was not found during status update"); } } }
private async Task CreateApproveOrRejectTransactionInPbf( string campaignId, string invoiceId, string transferId, PaymentTransferStatus status) { string encodedData; switch (status) { case PaymentTransferStatus.Accepted: var acceptFunc = new AcceptTransferFunction { TransferId = transferId, InvoiceId = invoiceId, CampaignId = campaignId }; encodedData = EncodeAcceptOrRejectRequestData(acceptFunc); break; case PaymentTransferStatus.Rejected: var rejectFunc = new RejectTransferFunction { TransferId = transferId, InvoiceId = invoiceId, CampaignId = campaignId }; encodedData = EncodeAcceptOrRejectRequestData(rejectFunc); break; default: throw new InvalidOperationException(); } var sourceAddress = _settingsService.GetMasterWalletAddress(); var targetAddress = _settingsService.GetPaymentTransfersAddress(); await AddGenericOperationInPbfAsync(encodedData, sourceAddress, targetAddress); }
public async Task ProcessPaymentTransfer_TransferNotInProcessing_ErrorCodeReturned(PaymentTransferStatus status) { _paymentTransfersRepositoryMock.Setup(x => x.GetByTransferIdAsync(It.IsAny <string>())) .ReturnsAsync(new PaymentTransferEntity { Status = status }); var sut = CreateSutInstance(); var result = await sut.AcceptPaymentTransferAsync(FakeTransferId); Assert.Equal(PaymentTransfersErrorCodes.InvalidStatus, result); }
private async Task <PaymentTransfersErrorCodes> AcceptOrRejectAsync(string transferId, PaymentTransferStatus status) { if (string.IsNullOrEmpty(transferId)) { _log.Error(message: "TransferId is empty when trying to update payment transfer status"); throw new ArgumentNullException(nameof(transferId)); } return(await _transactionScopeHandler.WithTransactionAsync(async() => { var paymentTransfer = await _paymentTransfersRepository.GetByTransferIdAsync(transferId); if (paymentTransfer == null) { _log.Warning("Payment transfer not find by transfer id", context: transferId); return PaymentTransfersErrorCodes.PaymentTransferNotFound; } if (paymentTransfer.Status != PaymentTransferStatus.Processing) { _log.Info("Payment transfer's status cannot be updated because it is not in Processing status"); return PaymentTransfersErrorCodes.InvalidStatus; } switch (status) { case PaymentTransferStatus.Pending: case PaymentTransferStatus.Processing: _log.Warning("Cannot update status to Pending or Processing", context: transferId); return PaymentTransfersErrorCodes.InvalidStatus; case PaymentTransferStatus.Accepted: case PaymentTransferStatus.Rejected: await _paymentTransfersRepository.SetStatusAsync(paymentTransfer.TransferId, status); _log.Info($"Successfully changed payment transfer's status to {status}", context: transferId); return PaymentTransfersErrorCodes.None; default: _log.Error(message: "Trying to update payment transfer's status to unsupported one", context: transferId); return PaymentTransfersErrorCodes.InvalidStatus; } })); }