comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); // ======================================== // Tägliche Bereinigungen // ======================================== // Magic-Links: Abgelaufene / verbrauchte Tokens entfernen (täglich 03:00) Schedule::command(PurgeMagicLinks::class, ['--days=30']) ->dailyAt('03:00') ->withoutOverlapping() ->runInBackground(); // PM-Entwürfe: Zombie-Drafts nach 180 Tagen Inaktivität archivieren (wöchentlich) Schedule::command(PurgeExpiredPressReleaseDrafts::class, ['--days=180']) ->weekly() ->sundays() ->at('04:00') ->withoutOverlapping() ->runInBackground(); // ======================================== // Geplante PM-Veröffentlichung // ======================================== // PM mit scheduled_at <= now & Status review automatisch veröffentlichen. // Läuft alle 5 Min — passt zum FormRule "scheduled_at min. 5 Min in Zukunft". Schedule::command(PublishScheduledPressReleases::class) ->everyFiveMinutes() ->withoutOverlapping() ->runInBackground(); // ======================================== // Manueller Rechnungskreis (MAN-) — Legacy-Zahlungen // ======================================== // Fällige Rechnungen für laufende Legacy-Zahlungsvereinbarungen ausstellen // (Periodenende erreicht), wie im Altsystem. Neue Abschlüsse laufen über // Stripe (STR-Kreis) und werden hier nicht angefasst. Schedule::command(GenerateManualInvoices::class) ->dailyAt('04:30') ->withoutOverlapping() ->runInBackground(); // ======================================== // PM-Kontingent (Stub bis zum echten Tarif-Modul) // ======================================== // Monatlicher Reset des verbrauchten PM-Kontingents (am 1. um 00:05). Schedule::command(ResetMonthlyPressReleaseQuota::class) ->monthlyOn(1, '00:05') ->withoutOverlapping() ->runInBackground();