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 @@