import db def ensure_ia_chat_schema(slug: str) -> None: """Chat "Générer avec l'IA" — plusieurs CONVERSATIONS par écran (demande explicite : gérer plusieurs fils, comme claude.ai), chacune portant sa propre liste de messages. ON DELETE CASCADE à chaque niveau (écran supprimé -> ses conversations -> leurs messages), même patron que _scene_objects (screens/scenes/ensure_scene_schema.py).""" conn = db.connect(slug) # _ia_chat_messages existait déjà (phase précédente, une seule # conversation par écran, colonne screen_id directe) sur les projets # déjà testés avant ce chantier — CREATE TABLE IF NOT EXISTS ne # migrerait pas son schéma. Aucune donnée à préserver (fonctionnalité # tout juste testée manuellement) : on repart d'une table neuve plutôt # que d'écrire une vraie migration pour quelques messages de test. cols = {row["name"] for row in conn.execute("PRAGMA table_info(_ia_chat_messages)").fetchall()} if cols and "conversation_id" not in cols: conn.execute("DROP TABLE _ia_chat_messages") conn.executescript( """ CREATE TABLE IF NOT EXISTS _ia_conversations ( id INTEGER PRIMARY KEY AUTOINCREMENT, screen_id INTEGER NOT NULL REFERENCES _screens(id) ON DELETE CASCADE, title TEXT NOT NULL DEFAULT 'Nouvelle conversation', created_at TEXT DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS _ia_chat_messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, conversation_id INTEGER NOT NULL REFERENCES _ia_conversations(id) ON DELETE CASCADE, role TEXT NOT NULL CHECK (role IN ('user', 'assistant')), content TEXT NOT NULL, created_at TEXT DEFAULT CURRENT_TIMESTAMP ); """ ) conn.commit() conn.close()