fix: isolate public subscribe from integration job failures

Queue Weeztix/Mailwizz after the HTTP response and catch dispatch errors.
Jobs log Mailwizz/Weeztix API failures without rethrowing so sync driver
and terminating callbacks do not surface 500s after a successful create.

Add JS fallback for non-JSON error responses, deployment note, and a
regression test for failing Mailwizz under QUEUE_CONNECTION=sync.

Made-with: Cursor
This commit is contained in:
2026-04-05 11:47:59 +02:00
parent d802ce2a7c
commit de83a6fb76
6 changed files with 102 additions and 27 deletions

View File

@@ -9,6 +9,8 @@ use App\Jobs\SyncSubscriberToMailwizz;
use App\Models\PreregistrationPage;
use App\Models\Subscriber;
use App\Models\WeeztixConfig;
use Illuminate\Support\Facades\Log;
use Throwable;
/**
* Orchestrates public registration: local persist first, then queue external integrations
@@ -26,10 +28,18 @@ final class RegisterSubscriberOnPage
$page->loadMissing('weeztixConfig', 'mailwizzConfig');
$weeztix = $page->weeztixConfig;
if ($this->weeztixCanIssueCodes($weeztix)) {
IssueWeeztixCouponForSubscriber::dispatch($subscriber);
} elseif ($page->mailwizzConfig !== null) {
SyncSubscriberToMailwizz::dispatch($subscriber->fresh());
try {
if ($this->weeztixCanIssueCodes($weeztix)) {
IssueWeeztixCouponForSubscriber::dispatch($subscriber)->afterResponse();
} elseif ($page->mailwizzConfig !== null) {
SyncSubscriberToMailwizz::dispatch($subscriber->fresh())->afterResponse();
}
} catch (Throwable $e) {
Log::error('RegisterSubscriberOnPage: could not queue integration jobs', [
'subscriber_id' => $subscriber->id,
'preregistration_page_id' => $page->id,
'message' => $e->getMessage(),
]);
}
return $subscriber;