diff --git a/app/Actions/YearEndProcedures/YearEndCleanup.php b/app/Actions/YearEndProcedures/YearEndCleanup.php new file mode 100644 index 0000000..ccf4861 --- /dev/null +++ b/app/Actions/YearEndProcedures/YearEndCleanup.php @@ -0,0 +1,76 @@ +cleanup(); + } + + /** + * @param $options array array of reset options - possible values are deleteRooms + * removeAuditionsFromRoom unassignJudges + + * + * @throws AuditionAdminException + */ + public function cleanup($options = []): true + { + if (! auth()->user() or ! auth()->user()->is_admin) { + throw new AuditionAdminException('Only administrators may perform this action'); + } + + // Delete all records in the audit_log_entries table + AuditLogEntry::truncate(); + AuditionFlag::truncate(); + BonusScore::truncate(); + CalculatedScore::truncate(); + DoublerRequest::truncate(); + EntryFlag::truncate(); + ScoreSheet::truncate(); + Seat::truncate(); + JudgeAdvancementVote::truncate(); + DB::table('entries')->delete(); + NominationEnsembleEntry::truncate(); + + if (in_array('deleteRooms', $options)) { + DB::table('auditions')->update(['room_id' => null]); + DB::table('auditions')->update(['order_in_room' => null]); + DB::table('room_judges')->truncate(); + DB::table('rooms')->truncate(); + } + + if (in_array('removeAuditionsFromRoom', $options)) { + DB::table('auditions')->update(['room_id' => null]); + DB::table('auditions')->update(['order_in_room' => null]); + } + + if (in_array('unassignJudges', $options)) { + DB::table('room_judges')->truncate(); + } + + return true; + + } +}