ValorSentimental / backend /base_datos.py
iagofp's picture
Mover eliminar cuenta, y cambair tema. Chat acorde a Landing
d8e9f19
Raw History Blame Contribute Delete
2.79 kB
from conexion_bd import ConexionBD
def iniciar_historial_usuario() -> None:
with ConexionBD.instancia().obtener_conexion() as conn:
conn.execute("PRAGMA foreign_keys = ON")
conn.execute(
"""
CREATE TABLE IF NOT EXISTS Usuarios (
id TEXT PRIMARY KEY,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
session_token TEXT,
avatar TEXT,
created_at TEXT NOT NULL
)
"""
)
# Migración: añade la columna avatar a bases de datos creadas antes de
# esta funcionalidad (ALTER TABLE no soporta IF NOT EXISTS en SQLite).
columnas_usuarios = {row["name"] for row in conn.execute("PRAGMA table_info(Usuarios)")}
if "avatar" not in columnas_usuarios:
conn.execute("ALTER TABLE Usuarios ADD COLUMN avatar TEXT")
conn.execute(
"""
CREATE TABLE IF NOT EXISTS Peliculas (
id TEXT PRIMARY KEY,
titulo TEXT NOT NULL,
genero TEXT
)
"""
)
conn.execute(
"""
CREATE TABLE IF NOT EXISTS Emociones (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
texto_analizado TEXT,
emocion TEXT NOT NULL,
valencia TEXT NOT NULL,
analizado_en TEXT NOT NULL,
FOREIGN KEY (user_id) REFERENCES Usuarios(id) ON DELETE CASCADE
)
"""
)
conn.execute(
"""
CREATE INDEX IF NOT EXISTS idx_emociones_user_tiempo
ON Emociones (user_id, analizado_en DESC)
"""
)
conn.execute(
"""
CREATE TABLE IF NOT EXISTS Historial_Peliculas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
pelicula_id TEXT NOT NULL,
emocion_id INTEGER,
valoracion REAL,
texto_sesion TEXT,
visto_en TEXT NOT NULL,
FOREIGN KEY (user_id) REFERENCES Usuarios(id) ON DELETE CASCADE,
FOREIGN KEY (pelicula_id) REFERENCES Peliculas(id) ON DELETE RESTRICT,
FOREIGN KEY (emocion_id) REFERENCES Emociones(id) ON DELETE SET NULL
)
"""
)
conn.execute(
"""
CREATE INDEX IF NOT EXISTS idx_historial_user_tiempo
ON Historial_Peliculas (user_id, visto_en DESC)
"""
)
conn.commit()