From fdbee350b8629648ee0372e303c952da4cb43343 Mon Sep 17 00:00:00 2001 From: Nicolas Dorier Date: Wed, 13 Nov 2024 18:31:55 +0900 Subject: [PATCH] Greenfield: Create Pull Request payoutMethods is now optional (#6396) --- .../GreenfieldPullPaymentController.cs | 24 +++++++------------ .../PullPaymentHostedService.cs | 2 ++ .../v1/swagger.template.pull-payments.json | 5 ++-- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/BTCPayServer/Controllers/GreenField/GreenfieldPullPaymentController.cs b/BTCPayServer/Controllers/GreenField/GreenfieldPullPaymentController.cs index 8ec85a185..2970cbd96 100644 --- a/BTCPayServer/Controllers/GreenField/GreenfieldPullPaymentController.cs +++ b/BTCPayServer/Controllers/GreenField/GreenfieldPullPaymentController.cs @@ -131,26 +131,20 @@ namespace BTCPayServer.Controllers.Greenfield { ModelState.AddModelError(nameof(request.BOLT11Expiration), $"The BOLT11 expiration should be positive"); } - PayoutMethodId?[]? payoutMethods = null; - if (request.PayoutMethods is { } payoutMethodsStr) + + var supported = _payoutHandlers.GetSupportedPayoutMethods(HttpContext.GetStoreData()); + request.PayoutMethods ??= supported.Select(s => s.ToString()).ToArray(); + for (int i = 0; i < request.PayoutMethods.Length; i++) { - payoutMethods = payoutMethodsStr.Select(s => + var pmi = request.PayoutMethods[i] is string pm ? PayoutMethodId.TryParse(pm) : null; + if (pmi is null || !supported.Contains(pmi)) { - PayoutMethodId.TryParse(s, out var pmi); - return pmi; - }).ToArray(); - var supported = _payoutHandlers.GetSupportedPayoutMethods(HttpContext.GetStoreData()); - for (int i = 0; i < payoutMethods.Length; i++) - { - if (!supported.Contains(payoutMethods[i])) - { - request.AddModelError(paymentRequest => paymentRequest.PayoutMethods[i], "Invalid or unsupported payment method", this); - } + request.AddModelError(paymentRequest => paymentRequest.PayoutMethods[i], "Invalid or unsupported payment method", this); } } - else + if (request.PayoutMethods.Length is 0) { - ModelState.AddModelError(nameof(request.PayoutMethods), "This field is required"); + ModelState.AddModelError(nameof(request.PayoutMethods), "At least one payout method is required"); } if (!ModelState.IsValid) return this.CreateValidationError(ModelState); diff --git a/BTCPayServer/HostedServices/PullPaymentHostedService.cs b/BTCPayServer/HostedServices/PullPaymentHostedService.cs index a1c3e12a1..ad9c67219 100644 --- a/BTCPayServer/HostedServices/PullPaymentHostedService.cs +++ b/BTCPayServer/HostedServices/PullPaymentHostedService.cs @@ -112,6 +112,8 @@ namespace BTCPayServer.HostedServices } public Task CreatePullPayment(string storeId, CreatePullPaymentRequest request) { + if (request.PayoutMethods.Length == 0) + throw new InvalidOperationException("request.PayoutMethods should have at least one payout method"); return CreatePullPayment(new CreatePullPayment() { StartsAt = request.StartsAt, diff --git a/BTCPayServer/wwwroot/swagger/v1/swagger.template.pull-payments.json b/BTCPayServer/wwwroot/swagger/v1/swagger.template.pull-payments.json index 3eb546cbb..ac6990374 100644 --- a/BTCPayServer/wwwroot/swagger/v1/swagger.template.pull-payments.json +++ b/BTCPayServer/wwwroot/swagger/v1/swagger.template.pull-payments.json @@ -225,11 +225,12 @@ }, "payoutMethods": { "type": "array", - "description": "The list of supported payout methods supported by this pull payment. Available options can be queried from the `StorePaymentMethods_GetStorePaymentMethods` endpoint", + "description": "The list of supported payout methods supported by this pull payment. Available options can be queried from the `StorePaymentMethods_GetStorePaymentMethods` endpoint. If `null`, all available payout methods will be supported.", "items": { "type": "string", "example": "BTC" - } + }, + "nullable": true } } }