From 4146464142f68d5f797024d5cfd266a6696c26c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Mon, 30 Sep 2024 17:32:08 +0200 Subject: [PATCH] loop and find gateway on all connections --- .../GoCardlessOAuthWebhookController.php | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Gateways/GoCardlessOAuthWebhookController.php b/app/Http/Controllers/Gateways/GoCardlessOAuthWebhookController.php index 0d91a288225f..c1f0a4ed1cc5 100644 --- a/app/Http/Controllers/Gateways/GoCardlessOAuthWebhookController.php +++ b/app/Http/Controllers/Gateways/GoCardlessOAuthWebhookController.php @@ -14,6 +14,7 @@ namespace App\Http\Controllers\Gateways; use App\Http\Controllers\Controller; use App\Http\Requests\GoCardless\WebhookRequest; +use App\Libraries\MultiDB; use App\Models\CompanyGateway; use App\Repositories\CompanyRepository; use Illuminate\Support\Arr; @@ -33,14 +34,34 @@ class GoCardlessOAuthWebhookController extends Controller $e = Arr::dot($event); if ($event['action'] === 'disconnected') { - /** @var \App\Models\CompanyGateway $company_gateway */ - $company_gateway = CompanyGateway::query() - ->whereJsonContains('config->account_id', $e['links.organisation']) - ->firstOrFail(); + $company_gateway = null; + + foreach (MultiDB::$dbs as $db) { + if ( + /** @var \App\Models\CompanyGateway $company_gateway */ + $cg = CompanyGateway::on($db) + ->where('settings->organisation_id', $e['links.organisation']) + ->exists() + ) { + $company_gateway = $cg; + + break; + } + } + + if ($company_gateway === null) { + return abort(404); + } $current = $company_gateway->getConfig('__current'); + $settings = $company_gateway->settings; + + $settings->organisation_id = null; + + $company_gateway->setSettings($settings); + if ($current) { $company_gateway->setConfig($current); $company_gateway->save(); @@ -49,5 +70,7 @@ class GoCardlessOAuthWebhookController extends Controller $this->company_repository->archive($company_gateway); } } + + return response()->noContent(); } }