106 lines
2.7 KiB
Python
106 lines
2.7 KiB
Python
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()) |