Introducción
En este tutorial, aprenderás a resolver el reto de la Clase 31 del Curso Avanzado de Java SE dictado por la profe @anncode. Pese a que este tutorial incluya capturas de pantalla con la solución en código que pueden ser de gran ayuda, el objetivo principal sería que te enfoques en el por qué detrás de cada cambio que realizarás 💚.
Paso 1: Ejecuta una sentencia ALTER
en el que agregas la columna date_viewed
a la tabla viewed
.
La columna date_viewed
debe ser de los tipos:
DATETIME
para que nos permita persistir tanto la fecha como la hora exacta en la que consumimos el contenido multimedia.NOT NULL
. ❕ Recuerda que cada una de las filas de esta tabla representa un contenido multimedia YA visto.ALTER TABLE 'viewed' ADD 'date_viewed' DATETIME NOT NULL;
Paso 2: Comprueba que se haya agregado de forma exitosa el campo date_viewed
ejecutando una sentencia DESCRIBE
para la tabla viewed
.DESCRIBE viewed;
Luego de que ejecutes la sentencia, debería mostrarse en pantalla un resultado similar al de la siguiente imagen:
Paso 3: Crea en la clase Database de tu proyecto amazonviewer una constante de tipo String que contenga el nombre de la nueva columna. Esto te permitirá que puedas agregar más adelante el nombre de la nueva columna al statement INSERT
que se encarga de setear una Movie como ‘viewed’, ubicado en la clase MovieDAO.
Paso 4: En la interfaz MovieDAO, modifica el statement INSERT
del método que setea como ‘viewed’ una Movie:
NOW()
donde iría ubicado el valor que corresponde a la posición de la columna ‘date_viewed’. 🛑 La función NOW()
retorna una instancia de la fecha y la hora actuales.Paso 5: En la interfaz MovieDAO, crea un método privado que se encargue de devolver la fecha y la hora en la que fue vista una Movie. 👀 Yo decidí llamarlo getDateTimeViewed, e hice que devuelva un objeto Timestamp, ya que es un tipo de dato que no genera problemas de compatibilidad con los campos DATETIME
de MySQL.
Paso 6: Haz los siguientes cambios en la clase Movie:
Paso 7: Dentro del método default read() de la interfaz MovieDAO, refactoriza el código que setea el campo viewed de un objeto Movie a partir del método getMovieViewedStatus (ver imagen del Paso 4 ⬆️) de la siguiente manera:
Haz que primero se obtenga el resultado de getMovieViewedStatus, y que luego basado en si la Movie fue vista o no, que se setee un Boolean.TRUE o un Boolean.FALSE, respectivamente, como valor para la propiedad ‘viewed’ del objeto tipo Movie. 📝DATO CURIOSO: Es una buena prácitca utilizar Boolean.TRUE o Boolean.FALSE en vez de las literales true o false. 👈🤓
Si la Movie fue vista, llama al método setter de la propiedad _dateTimeViewed _(creado en el Paso 6 dentro de la clase Movie ⬆️), y pásale por parámetros una llamada a la función getDateTimeViewed, como puedes observar en la imagen de abajo. Al llamar a este último método, obtienes la fecha y la hora en la que la Movie fue seteada como ‘viewed’. Esta información te será de utilidad para cuando elijas funcionalidades desde Menú tales como la que se encarga de mostrarte la información sobre las películas cargadas, o la que se encarga de generar los reportes.
Paso 8: Dentro del método makeReport(Date date) de la clase Main, llama al método Movie.makeMoviesList(). Este método se trae los últimos registros de Movies desde la base de datos. Luego, dentro del forEach que itera por cada Movie recuperada, antes de añadir una Movie como contenido del reporte:
¡Listo! Ahora cuando elijas la opción de crear un reporte por fecha, sólamente se reportaran las Movies que hayan sido vistas el mismo día en el que estés creando el reporte, tal que así: