$importId, 'status' => 'queued', 'stats' => [ 'total' => $totalFiles, 'processed' => 0, 'updated' => 0, 'skipped' => 0, 'errors' => 0, ], 'logs' => [ 'Import creato. In attesa del worker di coda.', ], 'issues' => [], 'started_at' => null, 'finished_at' => null, ]; $this->put($importId, $state); return $state; } public function get(string $importId): ?array { return Cache::get($this->key($importId)); } public function put(string $importId, array $state): void { Cache::put($this->key($importId), $state, $this->ttlSeconds); } public function update(string $importId, callable $callback): ?array { $state = $this->get($importId); if (! $state) { return null; } $updatedState = $callback($state) ?? $state; $this->put($importId, $updatedState); return $updatedState; } public function appendLog(string $importId, string $message): void { $this->update($importId, function (array $state) use ($message) { $timestamp = now()->format('H:i:s'); $state['logs'][] = '[' . $timestamp . '] ' . $message; return $state; }); } public function increment(string $importId, string $metric, int $amount = 1): void { $this->update($importId, function (array $state) use ($metric, $amount) { $state['stats'][$metric] = ($state['stats'][$metric] ?? 0) + $amount; return $state; }); } public function addIssue(string $importId, array $issue): void { $this->update($importId, function (array $state) use ($issue) { $state['issues'][] = $issue; return $state; }); } public function markRunning(string $importId): void { $this->update($importId, function (array $state) { $state['status'] = 'running'; $state['started_at'] = now()->toDateTimeString(); return $state; }); } public function markCompleted(string $importId): void { $this->update($importId, function (array $state) { $state['status'] = 'completed'; $state['finished_at'] = now()->toDateTimeString(); return $state; }); } public function markFailed(string $importId): void { $this->update($importId, function (array $state) { $state['status'] = 'failed'; $state['finished_at'] = now()->toDateTimeString(); return $state; }); } protected function key(string $importId): string { return 'territori-pdf-import:' . $importId; } }