option('expire'); $onlyDelete = $this->option('delete'); $dryRun = $this->option('dry-run'); $force = $this->option('force'); // If neither flag is set, do both $doExpire = !$onlyDelete || $onlyExpire; $doDelete = !$onlyExpire || $onlyDelete; $expirationMinutes = config('shop.cart.expiration_minutes', 60); $deletionHours = config('shop.cart.deletion_hours', 24); $this->info('Cart Cleanup'); $this->info('============'); $this->newLine(); // Show configuration $this->info("Configuration:"); $this->line(" • Expiration threshold: {$expirationMinutes} minutes of inactivity"); $this->line(" • Deletion threshold: {$deletionHours} hours of inactivity"); $this->newLine(); $expiredCount = 0; $deletedCount = 0; // Handle expiration if ($doExpire) { $cartsToExpire = Cart::shouldExpire()->get(); $expiredCount = $cartsToExpire->count(); $this->info("Carts to expire: {$expiredCount}"); if ($expiredCount > 0) { if ($dryRun) { $this->warn(" [DRY RUN] Would expire {$expiredCount} carts"); $this->table( ['ID', 'Customer', 'Items', 'Last Activity', 'Created'], $cartsToExpire->map(fn($cart) => [ substr($cart->id, 0, 8) . '...', $cart->customer_id ? substr($cart->customer_id, 0, 8) . '...' : 'Guest', $cart->items()->count(), $cart->last_activity_at?->diffForHumans() ?? $cart->updated_at->diffForHumans(), $cart->created_at->diffForHumans(), ])->toArray() ); } else { Shop::expireStaleCarts(); $this->info(" ✓ Expired {$expiredCount} carts"); } } $this->newLine(); } // Handle deletion if ($doDelete) { $cartsToDelete = Cart::shouldDelete()->get(); $deletedCount = $cartsToDelete->count(); $this->info("Carts to delete: {$deletedCount}"); if ($deletedCount > 0) { if ($dryRun) { $this->warn(" [DRY RUN] Would delete {$deletedCount} carts"); $this->table( ['ID', 'Status', 'Customer', 'Items', 'Last Activity', 'Created'], $cartsToDelete->map(fn($cart) => [ substr($cart->id, 0, 8) . '...', $cart->status->value, $cart->customer_id ? substr($cart->customer_id, 0, 8) . '...' : 'Guest', $cart->items()->count(), $cart->last_activity_at?->diffForHumans() ?? $cart->updated_at->diffForHumans(), $cart->created_at->diffForHumans(), ])->toArray() ); } else { if (!$force && !$this->confirm("Delete {$deletedCount} carts permanently?")) { $this->info('Deletion cancelled.'); return self::SUCCESS; } Shop::deleteOldCarts(); $this->info(" ✓ Deleted {$deletedCount} carts"); } } $this->newLine(); } // Summary $this->info('Summary'); $this->info('-------'); if ($dryRun) { $this->warn('[DRY RUN] No changes were made'); } $this->line(" • Carts expired: {$expiredCount}"); $this->line(" • Carts deleted: {$deletedCount}"); return self::SUCCESS; } }