---
name: TougliGui DB Schema
description: Tables SQLite créées par db::migrate() et conventions de la couche base de données
type: project
---

La fonction `db::migrate()` crée 7 tables via `execute_batch` avec `IF NOT EXISTS` (donc idempotente) :

- `profiles` (id TEXT PK, name TEXT UNIQUE, created_at TEXT)
- `guides` (gid TEXT PK, name TEXT, data TEXT, last_synced_at TEXT)
- `quest_completions` (profile_id, quest_name — PK composite, FK → profiles ON DELETE CASCADE)
- `settings` (key TEXT PK, value TEXT)
- `quest_step_progress` (profile_id, quest_name, step_index — PK composite, FK → profiles)
- `resource_inventory` (profile_id, resource_name — PK composite, FK → profiles)
- `quest_previews` (quest_url TEXT PK, indicators_json TEXT, cached_at TEXT DEFAULT datetime('now'))

**Why:** Connaissance nécessaire pour écrire les tests et vérifier les migrations.
**How to apply:** Toute modification de schéma doit passer par `migrate()` avec `IF NOT EXISTS` ou une migration additive.
