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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user