feat: clean Weeztix and Mailwizz when admin deletes subscriber

Run CleanupSubscriberIntegrationsService before delete: remove coupon code
in Weeztix via list+DELETE API; update Mailwizz contact to strip configured
source tag from the tag field and clear the mapped coupon field.

Extract MailwizzCheckboxlistTags and MailwizzSubscriberFormPayload for
shared sync/cleanup behaviour. Add WeeztixService list and delete helpers.

Integration failures are logged only; local delete always proceeds.
Feature tests cover Mailwizz strip+clear and Weeztix delete paths.

Made-with: Cursor
This commit is contained in:
2026-04-05 11:57:16 +02:00
parent de83a6fb76
commit 7eda51f52a
7 changed files with 552 additions and 64 deletions

View File

@@ -10,6 +10,7 @@ use App\Http\Requests\Admin\IndexSubscriberRequest;
use App\Http\Requests\Admin\QueueMailwizzSyncRequest;
use App\Models\PreregistrationPage;
use App\Models\Subscriber;
use App\Services\CleanupSubscriberIntegrationsService;
use App\Services\DispatchUnsyncedMailwizzSyncJobsService;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
@@ -34,8 +35,13 @@ class SubscriberController extends Controller
return view('admin.subscribers.index', compact('page', 'subscribers', 'unsyncedMailwizzCount'));
}
public function destroy(DestroySubscriberRequest $request, PreregistrationPage $page, Subscriber $subscriber): RedirectResponse
{
public function destroy(
DestroySubscriberRequest $request,
PreregistrationPage $page,
Subscriber $subscriber,
CleanupSubscriberIntegrationsService $cleanupIntegrations
): RedirectResponse {
$cleanupIntegrations->runBeforeDelete($subscriber);
$subscriber->delete();
return redirect()