From 29db141b84cb3cccb6c18cfa3cdd29fdaab747c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnther?= Date: Wed, 29 Jul 2026 12:37:48 +0200 Subject: [PATCH] Configurations for payment modules --- .../UpdateAvailablePaymentMethodAction.php | 20 ++++- .../UpdateAvailablePaymentMethodRequest.php | 4 + .../TenantPaymentMethodsGetController.php | 4 +- .../TenantPaymentMethodsUpdateController.php | 1 + .../Views/Partials/TenantPaymentMethods.vue | 45 +++++++++- .../CreateEvent/CreateEventCommand.php | 1 + .../UpdateEvent/UpdateEventCommand.php | 56 ++++++++++++- .../UpdateEvent/UpdateEventRequest.php | 12 ++- .../Event/Controllers/DetailsController.php | 4 +- .../Event/Views/Partials/CommonSettings.vue | 50 +++++++++++ app/Models/AvailablePaymentMethod.php | 11 +++ app/Models/Event.php | 6 +- app/Models/PaymentMethod.php | 77 +++++++++++++++++ app/Providers/GlobalDataProvider.php | 6 +- app/RelationModels/EventPaymentMethods.php | 18 +++- .../AvailablePaymentMethodResource.php | 10 +++ ...iguration_to_available_payment_methods.php | 23 +++++ ...configuration_to_event_payment_methods.php | 23 +++++ ..._140030_fix_event_payment_methods_slug.php | 84 +++++++++++++++++++ 19 files changed, 436 insertions(+), 19 deletions(-) create mode 100644 database/migrations/2026_07_29_140010_add_configuration_to_available_payment_methods.php create mode 100644 database/migrations/2026_07_29_140020_add_configuration_to_event_payment_methods.php create mode 100644 database/migrations/2026_07_29_140030_fix_event_payment_methods_slug.php diff --git a/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodAction.php b/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodAction.php index 118d4c9..2df18b0 100644 --- a/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodAction.php +++ b/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodAction.php @@ -3,6 +3,7 @@ namespace App\Domains\Admin\Actions\UpdateAvailablePaymentMethod; use App\Domains\Admin\Actions\RemovePaymentMethodUsage\RemovePaymentMethodUsageAction; +use App\Models\PaymentMethod; class UpdateAvailablePaymentMethodAction { @@ -13,16 +14,29 @@ class UpdateAvailablePaymentMethodAction public function execute(): UpdateAvailablePaymentMethodResponse { $response = new UpdateAvailablePaymentMethodResponse(); - $wasActive = $this->request->availablePaymentMethod->active; + $paymentMethod = $this->request->availablePaymentMethod; + $wasActive = $paymentMethod->active; - $this->request->availablePaymentMethod->update([ + // Nur bekannte Options-Keys übernehmen -- das Schema (PaymentMethod::OPTIONS) ist die Autorität. + $configuration = PaymentMethod::sanitizeConfiguration($paymentMethod->slug, $this->request->configuration); + + // Guard: Aktivierung nur erlaubt, wenn alle Pflicht-Optionen befüllt sind. + if ($this->request->active && !PaymentMethod::isConfigurationComplete($paymentMethod->slug, $configuration)) { + $response->success = false; + $response->message = 'Bitte zuerst alle Pflichtfelder ausfüllen, bevor die Zahlungsmethode aktiviert wird.'; + + return $response; + } + + $paymentMethod->update([ 'name' => $this->request->name, 'description' => $this->request->description, 'active' => $this->request->active, + 'configuration' => $configuration, ]); if ($wasActive && !$this->request->active) { - (new RemovePaymentMethodUsageAction())->execute($this->request->availablePaymentMethod); + (new RemovePaymentMethodUsageAction())->execute($paymentMethod); } $response->success = true; diff --git a/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodRequest.php b/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodRequest.php index 4cb27ce..f7c73d3 100644 --- a/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodRequest.php +++ b/app/Domains/Admin/Actions/UpdateAvailablePaymentMethod/UpdateAvailablePaymentMethodRequest.php @@ -6,11 +6,15 @@ use App\Models\AvailablePaymentMethod; class UpdateAvailablePaymentMethodRequest { + /** + * @param array $configuration + */ public function __construct( public AvailablePaymentMethod $availablePaymentMethod, public string $name, public ?string $description, public bool $active, + public array $configuration = [], ) { } } diff --git a/app/Domains/Admin/Controllers/TenantPaymentMethodsGetController.php b/app/Domains/Admin/Controllers/TenantPaymentMethodsGetController.php index bb9846c..824a7d4 100644 --- a/app/Domains/Admin/Controllers/TenantPaymentMethodsGetController.php +++ b/app/Domains/Admin/Controllers/TenantPaymentMethodsGetController.php @@ -3,6 +3,7 @@ namespace App\Domains\Admin\Controllers; use App\Models\AvailablePaymentMethod; +use App\Resources\AvailablePaymentMethodResource; use App\Scopes\CommonController; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -12,7 +13,8 @@ class TenantPaymentMethodsGetController extends CommonController public function __invoke(Request $request): JsonResponse { return response()->json([ - 'paymentMethods' => AvailablePaymentMethod::all(), + 'paymentMethods' => AvailablePaymentMethod::all() + ->map(fn (AvailablePaymentMethod $method) => new AvailablePaymentMethodResource($method)->toArray($request)), 'saveEndpoint' => '/api/v1/admin/tenant/payment-methods', ]); } diff --git a/app/Domains/Admin/Controllers/TenantPaymentMethodsUpdateController.php b/app/Domains/Admin/Controllers/TenantPaymentMethodsUpdateController.php index 7d4c7c1..42588a2 100644 --- a/app/Domains/Admin/Controllers/TenantPaymentMethodsUpdateController.php +++ b/app/Domains/Admin/Controllers/TenantPaymentMethodsUpdateController.php @@ -20,6 +20,7 @@ class TenantPaymentMethodsUpdateController extends CommonController name: $request->input('name'), description: $request->input('description'), active: (bool) $request->input('active'), + configuration: (array) $request->input('configuration', []), )); $response = $action->execute(); diff --git a/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue b/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue index 7e93d24..742fa51 100644 --- a/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue +++ b/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue @@ -1,5 +1,5 @@