From 22c9cadb430ac8e3b365d5fa3e5ab5fd82bbe9f7 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Tue, 21 Jul 2026 00:16:52 +0200 Subject: [PATCH] Migrazione: rimuove i tag orfani training.performance-class.* MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Il riquadro training "performance-class" è stato rimosso dal seed nel commit 9966ec3, ma i suoi 5 tag restavano nei DB esistenti come orfani non renderizzati (uno con un edit errato dell'editor, "Holistic Class"). Aggiunge una DELETE idempotente per l'intero gruppo; il seed non li reinserisce (trainings.ts non ha più questo id). Verificata su copia del DB prod: 5 -> 0 orfani, riquadri validi e 39 edit reali del pannello intatti. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/db.ts | 6 ++++++ tests/content-db.test.ts | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/lib/db.ts b/src/lib/db.ts index c321d9d..4c1a88b 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -183,6 +183,12 @@ export function createDb(path?: string): Database.Database { // valore → idempotente, non tocca eventuali modifiche del pannello. db.prepare("UPDATE content_blocks SET value = 'Performance Class' WHERE tag = 'service.performance-class.title' AND value = 'Class'").run(); + // Pulizia tag orfani: il riquadro training "performance-class" è stato rimosso dal seed + // (commit 9966ec3, "Training: 6 riquadri"), ma i suoi tag restano nei DB esistenti — orfani, + // non renderizzati da nessuna pagina. Rimuoviamo l'intero gruppo. Idempotente. Il seed non li + // reinserisce (trainings.ts non ha più questo id). + db.prepare("DELETE FROM content_blocks WHERE tag LIKE 'training.performance-class.%'").run(); + // Modifiche 03: due ingressi dello stesso stabile → indirizzo esteso in footer e contatti. // Il tag global.contact.map-query è nuovo (inserito dal seed); qui si aggiorna solo l'indirizzo // già esistente, se non modificato dal pannello. Idempotente. diff --git a/tests/content-db.test.ts b/tests/content-db.test.ts index ce61e6b..1614306 100644 --- a/tests/content-db.test.ts +++ b/tests/content-db.test.ts @@ -139,6 +139,28 @@ describe('schema content_blocks e ruoli', () => { } }); + it('rimuove i tag orfani training.performance-class.* (riquadro rimosso)', () => { + const dir = mkdtempSync(join(tmpdir(), 'il-db-orf-')); + const path = join(dir, 'test.db'); + try { + // DB con i tag orfani del vecchio riquadro performance-class. + const db1 = createDb(path); + const ins = db1.prepare("INSERT OR REPLACE INTO content_blocks (tag, type, value, guid) VALUES (?, 'text', ?, ?)"); + ins.run('training.performance-class.title', 'Holistic Class', 'g1'); + ins.run('training.performance-class.caption', 'Classi fino a 8 persone', 'g2'); + db1.close(); + + const db2 = createDb(path); + const count = (db2.prepare("SELECT count(*) c FROM content_blocks WHERE tag LIKE 'training.performance-class.%'").get() as { c: number }).c; + expect(count).toBe(0); + // I riquadri validi restano. + expect((db2.prepare("SELECT count(*) c FROM content_blocks WHERE tag = 'training.holistic-class.title'").get() as { c: number }).c).toBe(1); + db2.close(); + } finally { + rmSync(dir, { recursive: true, force: true }); + } + }); + it('migra un DB esistente senza colonna role', () => { // simula DB vecchio: createDb due volte sullo stesso path in-memory non è possibile, // quindi si verifica che la migrazione sia idempotente (doppia esecuzione non lancia)