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 })); } }
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; } }