diff --git a/src/app/Console/Commands/DB/ExpungeCommand.php b/src/app/Console/Commands/DB/ExpungeCommand.php new file mode 100644 --- /dev/null +++ b/src/app/Console/Commands/DB/ExpungeCommand.php @@ -0,0 +1,49 @@ +subMonthsWithoutOverflow(6)) + ->delete(); + + \App\Policy\Greylist\Whitelist::where('updated_at', '<', Carbon::now()->subMonthsWithoutOverflow(6)) + ->delete(); + + \App\Policy\RateLimit::where('updated_at', '<', Carbon::now()->subMonthsWithoutOverflow(6)) + ->delete(); + + \App\SignupCode::where('created_at', '<', Carbon::now()->subMonthsWithoutOverflow(6)) + ->forceDelete(); + + DB::table('failed_jobs')->where('failed_at', '<', Carbon::now()->subMonthsWithoutOverflow(6)) + ->delete(); + + // TODO: What else? Should we force-delete deleted "dummy/spammer" accounts? + } +} diff --git a/src/app/Console/Kernel.php b/src/app/Console/Kernel.php --- a/src/app/Console/Kernel.php +++ b/src/app/Console/Kernel.php @@ -40,6 +40,9 @@ // This removes passport expired/revoked tokens and auth codes from the database $schedule->command('passport:purge')->dailyAt('06:30'); + + // Keep the database size under control (every Monday) + $schedule->command('db:expunge')->weeklyOn(1, '04:00'); } /** diff --git a/src/tests/Feature/Console/DB/ExpungeTest.php b/src/tests/Feature/Console/DB/ExpungeTest.php new file mode 100644 --- /dev/null +++ b/src/tests/Feature/Console/DB/ExpungeTest.php @@ -0,0 +1,19 @@ +assertSame(0, $code); + } +}