description = 'Clean up old presence activity logs, keeping last ' . timebank_config('presence_settings.keep_last_presence_updates') . ' per profile'; } public function handle() { // Get all presence activities grouped by causer (profile) $presenceActivities = Activity::where('log_name', 'presence_update') ->whereNotNull('causer_id') ->whereNotNull('causer_type') ->orderBy('created_at', 'desc') ->get() ->groupBy(function ($activity) { return $activity->causer_type . '_' . $activity->causer_id; }); $totalDeleted = 0; foreach ($presenceActivities as $profileKey => $activities) { // Keep only the latest records for each profile as defined in config if ($activities->count() > timebank_config('presence_settings.keep_last_presence_updates')) { $toDelete = $activities->skip(4)->pluck('id'); $deleted = Activity::whereIn('id', $toDelete)->delete(); $totalDeleted += $deleted; } } $this->info("Deleted {$totalDeleted} old presence records, keeping last " . timebank_config('presence_settings.keep_last_presence_updates') . " per profile."); } }