feat(ticketing): add service and command for converting validity times to UTC

This commit is contained in:
2026-09-21 16:05:18 -03:00
parent 3e3b3bfac0
commit 969e99b3ae
4 changed files with 213 additions and 1 deletions

View File

@@ -1,9 +1,10 @@
<?php
use App\Domains\Core\Auth\Services\AdminCredentialVerifier;
use App\Domains\Commerce\Catalog\Services\ExpireStockReservationsService;
use App\Domains\Commerce\Purchase\Services\TenantTransactionResetService;
use App\Domains\Core\Auth\Services\AdminCredentialVerifier;
use App\Domains\Ticketing\Ticket\Services\BackfillRefundedUnitsService;
use App\Domains\Ticketing\Ticket\Services\ConvertValidityTimesToUtcService;
use App\Domains\Ticketing\Ticket\Services\LoadTestTicketDatasetService;
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
@@ -181,3 +182,34 @@ Artisan::command(
return self::SUCCESS;
},
)->purpose('Delete tenant sales, carts, tickets and reservations while preserving users and catalog');
Artisan::command(
'tickets:convert-validity-times-to-utc
{--ids= : IDs separados por coma, confirmados como hora local}
{--all : Seleccionar todos los validity_times de tipo fixed_window}
{--source-timezone=America/Argentina/Buenos_Aires : Zona de los valores guardados}
{--apply : Aplicar la conversión; sin esta opción sólo muestra una vista previa}',
function (ConvertValidityTimesToUtcService $service): int {
$input = trim((string) $this->option('ids'));
if ($input !== '' && ! preg_match('/^[1-9][0-9]*(\s*,\s*[1-9][0-9]*)*$/', $input)) {
$this->error('--ids debe contener enteros positivos separados por coma.');
return self::FAILURE;
}
$ids = $input === '' ? [] : array_values(array_unique(array_map('intval', explode(',', $input))));
$this->warn('Los valores seleccionados se interpretan como hora local. Repetir --apply vuelve a convertirlos; no hay registro de ejecuciones.');
try {
$result = $service->run($ids, (string) $this->option('source-timezone'), (bool) $this->option('apply'), (bool) $this->option('all'));
} catch (Throwable $exception) {
$this->error($exception->getMessage());
return self::FAILURE;
}
$this->table(['ID', 'Estado', 'Inicio original', 'Fin original', 'Inicio UTC', 'Fin UTC'], $result);
$this->info($this->option('apply')
? 'Conversión aplicada. Los time_window no fueron modificados.'
: 'Vista previa: no se modificó ningún registro.');
return self::SUCCESS;
}
)->purpose('Convertir fixed_window locales a UTC por IDs o todos, con vista previa');