43 lines
1.3 KiB
PHP
43 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
/**
|
|
* Delete artwork_view_events rows older than N days.
|
|
*
|
|
* The view event log grows ~proportionally to site traffic. Rows beyond the
|
|
* retention window are no longer useful for trending (which looks back ≤7
|
|
* days) or for computing "recently viewed" lists in the UI.
|
|
*
|
|
* Default retention is 90 days — long enough for analytics queries and user
|
|
* history pages, short enough to keep the table from growing unbounded.
|
|
*
|
|
* Usage:
|
|
* php artisan skinbase:prune-view-events
|
|
* php artisan skinbase:prune-view-events --days=30
|
|
*/
|
|
class PruneViewEventsCommand extends Command
|
|
{
|
|
protected $signature = 'skinbase:prune-view-events {--days=90 : Delete events older than this many days}';
|
|
protected $description = 'Delete artwork_view_events rows older than N days';
|
|
|
|
public function handle(): int
|
|
{
|
|
$days = (int) $this->option('days');
|
|
$cutoff = now()->subDays($days);
|
|
|
|
$deleted = DB::table('artwork_view_events')
|
|
->where('viewed_at', '<', $cutoff)
|
|
->delete();
|
|
|
|
$this->info("Pruned {$deleted} view event(s) older than {$days} days (cutoff: {$cutoff}).");
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|