43 lines
1.4 KiB
PHP
43 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Event;
|
|
use App\Services\Photobooth\PhotoboothProvisioner;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class DeactivateExpiredPhotoboothAccounts extends Command
|
|
{
|
|
protected $signature = 'photobooth:cleanup-expired';
|
|
|
|
protected $description = 'Disable Photobooth FTP accounts that have passed their expiry date.';
|
|
|
|
public function handle(PhotoboothProvisioner $provisioner): int
|
|
{
|
|
$total = 0;
|
|
|
|
Event::query()
|
|
->where('photobooth_enabled', true)
|
|
->whereNotNull('photobooth_expires_at')
|
|
->where('photobooth_expires_at', '<=', now())
|
|
->chunkById(50, function ($events) use (&$total, $provisioner) {
|
|
foreach ($events as $event) {
|
|
try {
|
|
$provisioner->disable($event);
|
|
$total++;
|
|
} catch (\Throwable $exception) {
|
|
Log::error('Failed to disable expired photobooth account', [
|
|
'event_id' => $event->id,
|
|
'message' => $exception->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
});
|
|
|
|
$this->info(sprintf('Photobooth cleanup complete (%d accounts disabled).', $total));
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|