import os import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text DATABASE_URL = os.getenv("DATABASE_URL") # Definiamo le tabelle una per una per evitare l'errore di asyncpg TABLES_SQL = [ """ CREATE TABLE IF NOT EXISTS users ( "id" TEXT PRIMARY KEY, "identifier" TEXT NOT NULL UNIQUE, "metadata" JSONB NOT NULL, "createdAt" TEXT ); """, """ CREATE TABLE IF NOT EXISTS threads ( "id" TEXT PRIMARY KEY, "createdAt" TEXT, "name" TEXT, "userId" TEXT, "userIdentifier" TEXT, "tags" TEXT[], "metadata" JSONB ); """, """ CREATE TABLE IF NOT EXISTS steps ( "id" TEXT PRIMARY KEY, "name" TEXT NOT NULL, "type" TEXT NOT NULL, "threadId" TEXT NOT NULL, "parentId" TEXT, "streaming" BOOLEAN NOT NULL, "waitForAnswer" BOOLEAN, "isError" BOOLEAN, "metadata" JSONB, "tags" TEXT[], "input" TEXT, "output" TEXT, "createdAt" TEXT, "start" TEXT, "end" TEXT, "generation" JSONB, "showInput" TEXT, -- FIX: Cambiato da BOOLEAN a TEXT "language" TEXT, "indent" INT, "defaultOpen" BOOLEAN ); """, """ CREATE TABLE IF NOT EXISTS elements ( "id" TEXT PRIMARY KEY, "threadId" TEXT, "type" TEXT, "url" TEXT, "chainlitKey" TEXT, "name" TEXT NOT NULL, "display" TEXT, "objectKey" TEXT, "size" TEXT, "page" INT, "language" TEXT, "forId" TEXT, "mime" TEXT, "props" JSONB ); """, """ CREATE TABLE IF NOT EXISTS feedbacks ( "id" TEXT PRIMARY KEY, "forId" TEXT NOT NULL, "threadId" TEXT NOT NULL, "value" INT NOT NULL, "comment" TEXT, "strategy" TEXT ); """ ] async def init_db(): if not DATABASE_URL: print("❌ DATABASE_URL non trovato.") return print("🔧 Inizializzazione manuale tabelle database (Sequenziale)...") try: engine = create_async_engine(DATABASE_URL) async with engine.begin() as conn: for i, sql_command in enumerate(TABLES_SQL): print(f" Creating table {i+1}/{len(TABLES_SQL)}...") await conn.execute(text(sql_command)) print("✅ Tutte le tabelle create con successo.") except Exception as e: print(f"❌ Errore critico durante la creazione delle tabelle: {e}") finally: await engine.dispose() if __name__ == "__main__": asyncio.run(init_db())