diff --git a/app/Jobs/SyncSubscriberToMailwizz.php b/app/Jobs/SyncSubscriberToMailwizz.php index 2c474d0..c414f02 100644 --- a/app/Jobs/SyncSubscriberToMailwizz.php +++ b/app/Jobs/SyncSubscriberToMailwizz.php @@ -14,7 +14,6 @@ use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueueAfterCommit; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; use RuntimeException; use Throwable; @@ -24,7 +23,6 @@ class SyncSubscriberToMailwizz implements ShouldBeUnique, ShouldQueueAfterCommit use Dispatchable; use InteractsWithQueue; use Queueable; - use SerializesModels; /** * Seconds before the unique lock expires if the worker dies before releasing it. @@ -38,23 +36,42 @@ class SyncSubscriberToMailwizz implements ShouldBeUnique, ShouldQueueAfterCommit */ public array $backoff = [10, 30, 60]; - public function __construct(public Subscriber $subscriber) + /** + * Set in the constructor for new jobs. Remains null when an old queue payload (pre–subscriber-id refactor) is unserialized. + */ + public ?int $subscriberId = null; + + /** + * @param Subscriber|int $subscriber Model is accepted when dispatching; only the id is serialized for the queue. + */ + public function __construct(Subscriber|int $subscriber) { + $this->subscriberId = $subscriber instanceof Subscriber + ? (int) $subscriber->getKey() + : $subscriber; $this->onQueue('mailwizz'); } public function uniqueId(): string { - return (string) $this->subscriber->getKey(); + return $this->subscriberId !== null + ? (string) $this->subscriberId + : 'stale-mailwizz-sync-payload'; } public function handle(): void { + if ($this->subscriberId === null) { + Log::notice('SyncSubscriberToMailwizz: skipped job with missing subscriber id (stale queue payload). Clear the queue or re-dispatch sync jobs.'); + + return; + } + try { $this->runSync(); } catch (Throwable $e) { Log::error('SyncSubscriberToMailwizz: integration failed; subscriber remains local (use admin resync if needed)', [ - 'subscriber_id' => $this->subscriber->id, + 'subscriber_id' => $this->subscriberId, 'message' => $e->getMessage(), ]); } @@ -64,7 +81,7 @@ class SyncSubscriberToMailwizz implements ShouldBeUnique, ShouldQueueAfterCommit { $subscriber = Subscriber::query() ->with(['preregistrationPage.mailwizzConfig']) - ->find($this->subscriber->id); + ->find($this->subscriberId); if ($subscriber === null) { return; @@ -115,7 +132,7 @@ class SyncSubscriberToMailwizz implements ShouldBeUnique, ShouldQueueAfterCommit public function failed(?Throwable $exception): void { Log::error('SyncSubscriberToMailwizz failed', [ - 'subscriber_id' => $this->subscriber->id, + 'subscriber_id' => $this->subscriberId, 'message' => $exception?->getMessage(), ]); }