Piantine pubblicate anche dopo un ripristino; posto unico senza gare

- Lo stato "Pubblicata" non dipende più dall'id del territorio, che il
  ripristino ricrea: l'impronta usa il numero, e la piantina ricorda il
  percorso del PDF pubblicato (pdf_pubblicato, con migrazione che riconosce
  le piantine già pubblicate).
- BackupOperationState: corrente() in sola lettura e liberaCorrente() sotto
  lo stesso mutex di occupa(), così una lettura non cancella il puntatore
  di un'operazione appena avviata.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 15:33:07 +02:00
parent 426a95211d
commit e7148c7b32
8 changed files with 143 additions and 22 deletions

View File

@@ -212,6 +212,7 @@ XML;
$mappa->update([
'geojson_pubblicato' => $mappa->geojson,
'impronta_pubblicata' => $mappa->impronta(),
'pdf_pubblicato' => $pdf,
'pubblicata_at' => now(),
]);

View File

@@ -105,6 +105,26 @@ class RipristinoBackupTest extends TestCase
$this->assertTrue(Storage::disk('public')->exists('territori-mappe/piantina-1.jpg'));
}
/**
* Una piantina pubblicata resta "Pubblicata" anche se il ripristino ricrea
* il suo territorio con un id nuovo: prima lo stato dipendeva dall'id.
*/
public function test_una_piantina_pubblicata_resta_pubblicata_dopo_il_ripristino(): void
{
$this->installazioneConPiantine();
$mappa = TerritorioMappa::with('territorio.zona')->sole();
$mappa->update([
'impronta_pubblicata' => $mappa->impronta(),
'pdf_pubblicato' => $mappa->territorio->pdf_path,
]);
$this->assertSame(TerritorioMappa::STATO_PUBBLICATA, $mappa->fresh()->stato());
$stato = $this->ripristina($this->backup());
$this->assertSame('completed', $stato['status'], (string) $stato['error']);
$this->assertSame(TerritorioMappa::STATO_PUBBLICATA, TerritorioMappa::sole()->stato());
}
/**
* Compatibilita' all'indietro: un archivio di formato 1 si ripristina.
* Non contiene piantine e storico, che restano vuoti — tenere quelle