53 lines
2.0 KiB
PHP
53 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Admin\Actions\UpdateAvailablePaymentMethod;
|
|
|
|
use App\Domains\Admin\Actions\RemovePaymentMethodUsage\RemovePaymentMethodUsageAction;
|
|
use App\Models\PaymentMethod;
|
|
|
|
class UpdateAvailablePaymentMethodAction
|
|
{
|
|
public function __construct(private UpdateAvailablePaymentMethodRequest $request)
|
|
{
|
|
}
|
|
|
|
public function execute(): UpdateAvailablePaymentMethodResponse
|
|
{
|
|
$response = new UpdateAvailablePaymentMethodResponse();
|
|
$paymentMethod = $this->request->availablePaymentMethod;
|
|
$wasActive = $paymentMethod->active;
|
|
|
|
// Nur bekannte Options-Keys übernehmen -- das Options-Schema des Zahlungsmoduls ist die Autorität.
|
|
$configuration = PaymentMethod::sanitizeConfiguration($paymentMethod->slug, $this->request->configuration);
|
|
|
|
// Guard: Aktivierung nur erlaubt, wenn alle Pflicht-Optionen befüllt und gültig sind. Inaktiv
|
|
// gespeichert werden darf auch eine unfertige Konfiguration -- als Entwurf.
|
|
if ($this->request->active && !PaymentMethod::isConfigurationComplete($paymentMethod->slug, $configuration)) {
|
|
$errors = PaymentMethod::configurationErrors($paymentMethod->slug, $configuration);
|
|
|
|
$response->success = false;
|
|
$response->message = $errors !== []
|
|
? implode(' ', $errors) . ' Die Zahlungsmethode kann so nicht aktiviert werden.'
|
|
: '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($paymentMethod);
|
|
}
|
|
|
|
$response->success = true;
|
|
$response->message = 'Zahlungsmethode wurde gespeichert.';
|
|
|
|
return $response;
|
|
}
|
|
}
|