expireAfter(60)->dontRelease()]; } public function handle(): void { try { $this->cleanupInvitationLink(); $this->cleanupExpiredEmailChangeRequests(); $this->enforceBackupRetention(); } catch (\Throwable $e) { Log::error('CleanupInstanceStuffsJob failed with error: '.$e->getMessage()); } } private function cleanupInvitationLink() { $invitation = TeamInvitation::all(); foreach ($invitation as $item) { $item->isValid(); } } private function cleanupExpiredEmailChangeRequests() { User::whereNotNull('email_change_code_expires_at') ->where('email_change_code_expires_at', '<', now()) ->update([ 'pending_email' => null, 'email_change_code' => null, 'email_change_code_expires_at' => null, ]); } private function enforceBackupRetention(): void { if (! Cache::add('backup-retention-enforcement', true, 1800)) { return; } try { $backups = ScheduledDatabaseBackup::where('enabled', true)->get(); foreach ($backups as $backup) { try { removeOldBackups($backup); } catch (\Throwable $e) { Log::warning('Failed to enforce retention for backup '.$backup->id.': '.$e->getMessage()); } } } catch (\Throwable $e) { Log::error('Failed to enforce backup retention: '.$e->getMessage()); Cache::forget('backup-retention-enforcement'); } } }