Beispiel #1
0
        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");
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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;
                }
            }));
        }