ValorSentimental / backend /base_datos.py
iagofp's picture
Diagramas
d639ab2
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,
created_at TEXT NOT NULL
)
"""
)
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.execute(
"""
CREATE TABLE IF NOT EXISTS Ciclo_Recomendacion (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
emocion_pre_id INTEGER NOT NULL,
estrategia INTEGER NOT NULL,
creado_en TEXT NOT NULL,
pelicula_id TEXT,
emocion_post_id INTEGER,
FOREIGN KEY (user_id) REFERENCES Usuarios(id) ON DELETE CASCADE,
FOREIGN KEY (emocion_pre_id) REFERENCES Emociones(id) ON DELETE RESTRICT,
FOREIGN KEY (emocion_post_id) REFERENCES Emociones(id) ON DELETE SET NULL,
FOREIGN KEY (pelicula_id) REFERENCES Peliculas(id) ON DELETE SET NULL
)
"""
)
conn.execute(
"""
CREATE INDEX IF NOT EXISTS idx_ciclo_user_tiempo
ON Ciclo_Recomendacion (user_id, creado_en DESC)
"""
)
conn.commit()