示例#1
0
        public async Task <IActionResult> CreateAsync([FromBody] CreatePaymentRequestModel model)
        {
            try
            {
                IReadOnlyList <string> settlementAssets =
                    await _assetSettingsService.ResolveSettlementAsync(model.MerchantId);

                if (!settlementAssets.Contains(model.SettlementAssetId))
                {
                    return(BadRequest(new PaymentRequestErrorModel
                    {
                        Code = CreatePaymentRequestErrorType.SettlementAssetNotAvailable
                    }));
                }

                IReadOnlyList <string> paymentAssets =
                    await _assetSettingsService.ResolvePaymentAsync(model.MerchantId, model.SettlementAssetId);

                if (!paymentAssets.Contains(model.PaymentAssetId))
                {
                    return(BadRequest(new PaymentRequestErrorModel
                    {
                        Code = CreatePaymentRequestErrorType.PaymentAssetNotAvailable
                    }));
                }

                var paymentRequest = Mapper.Map <PaymentRequest>(model);

                IPaymentRequest createdPaymentRequest = await _paymentRequestService.CreateAsync(paymentRequest);

                return(Ok(Mapper.Map <PaymentRequestModel>(createdPaymentRequest)));
            }
            catch (AssetUnknownException e)
            {
                _log.Error(e, e.Message, e.Asset);

                return(BadRequest(new PaymentRequestErrorModel
                {
                    Code = CreatePaymentRequestErrorType.RequestValidationCommonError
                }));
            }
            catch (AssetNetworkNotDefinedException e)
            {
                _log.Error(e, e.Message, e.AssetId);

                return(BadRequest(new PaymentRequestErrorModel
                {
                    Code = CreatePaymentRequestErrorType.RequestValidationCommonError
                }));
            }
        }
示例#2
0
        public async Task <IActionResult> CreateAsync([FromBody] CreatePaymentRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ErrorResponse().AddErrors(ModelState)));
            }

            try
            {
                IReadOnlyList <string> settlementAssets =
                    await _assetsAvailabilityService.ResolveSettlementAsync(model.MerchantId);

                if (!settlementAssets.Contains(model.SettlementAssetId))
                {
                    return(BadRequest(ErrorResponse.Create("Settlement asset is not available")));
                }

                IReadOnlyList <string> paymentAssets =
                    await _assetsAvailabilityService.ResolvePaymentAsync(model.MerchantId, model.SettlementAssetId);

                if (!paymentAssets.Contains(model.PaymentAssetId))
                {
                    return(BadRequest(ErrorResponse.Create("Payment asset is not available")));
                }

                var paymentRequest = Mapper.Map <PaymentRequest>(model);

                IPaymentRequest createdPaymentRequest = await _paymentRequestService.CreateAsync(paymentRequest);

                return(Ok(Mapper.Map <PaymentRequestModel>(createdPaymentRequest)));
            }
            catch (AssetUnknownException assetEx)
            {
                await _log.WriteErrorAsync(nameof(PaymentRequestsController), nameof(CreateAsync),
                                           new { assetEx.Asset }.ToJson(), assetEx);

                return(BadRequest(ErrorResponse.Create($"Asset {assetEx.Asset} can't be resolved")));
            }
            catch (Exception ex)
            {
                await _log.WriteErrorAsync(nameof(CreateAsync), model.ToJson(), ex);

                throw;
            }
        }