```mermaid classDiagram class Usuario { +id str +username str +token str } class Pelicula { +id str +titulo str +genero str } class Emocion { +id int +user_id str +texto_analizado str +emocion str +valencia str +analizado_en str } class HistorialPelicula { +id int +user_id str +pelicula_id str +emocion_id int +valoracion float +texto_sesion str +visto_en str } class CicloRecomendacion { +id int +user_id str +emocion_pre_id int +estrategia int +creado_en str +pelicula_id str +emocion_post_id int } class EmocionVO { +id int +emocion str +valencia str +analizado_en str +texto_analizado str +desde(e) EmocionVO } class PeliculaVistaVO { +id int +user_id str +movie_id str +titulo str +emocion str +valoracion float +texto_sesion str +visto_en str } class UsuarioDao { -bd ConexionBD +obtener_conexion() Connection +registrar(nombre, contrasena) Usuario +login(nombre, contrasena) Usuario +obtener_por_id(user_id) Usuario +obtener_por_nombre(nombre) Usuario +obtener_por_token(token) Usuario +actualizar_token(user_id, token) bool +cerrar_sesion(token) bool +actualizar_contrasena(user_id, contrasena_nueva) bool +eliminar(user_id) bool } class PeliculaDao { -bd ConexionBD +obtener_conexion() Connection } class EmocionDao { -bd ConexionBD +obtener_conexion() Connection } class HistorialDao { -bd ConexionBD +obtener_conexion() Connection } class CicloDao { -bd ConexionBD +obtener_conexion() Connection } EmocionVO "1" <-- "1" Emocion : convierte desde PeliculaVistaVO "1" --> "1" HistorialPelicula : basado en PeliculaVistaVO "1" --> "1" Pelicula : contiene datos de UsuarioDao "1" --> "*" Usuario : gestiona CRUD PeliculaDao "1" --> "*" Pelicula : gestiona CRUD EmocionDao "1" --> "*" Emocion : gestiona CRUD HistorialDao "1" --> "*" HistorialPelicula : gestiona CRUD CicloDao "1" --> "*" CicloRecomendacion : gestiona CRUD ```