where('archivee_a', '<=', now()->subDays(Classe::DELAI_PURGE_JOURS)) ->withCount('eleves') ->get(); $purgees = 0; foreach ($classes as $classe) { // Ne peut arriver qu'en cas d'anomalie (un lab expire en 45 min) : // on ne supprime pas une session dont la stack Heat vivrait encore. if ($classe->aDesLabsEnCours()) { Log::warning('Purge RGPD reportée : lab en cours', ['classe_id' => $classe->id]); continue; } DB::transaction(fn () => $classe->delete()); Log::info('Purge RGPD : classe supprimée', [ 'classe_id' => $classe->id, 'eleves' => $classe->eleves_count, 'archivee_a' => $classe->archivee_a->toDateString(), ]); $purgees++; } $this->info("{$purgees} classe(s) purgée(s)."); } }