Versión: 13 de Mayo de 2024
- Afianzar los conocimientos obtenidos sobre el uso de Express para desarrollar servidores web.
- Aprender a manejar relaciones entre los modelos de la BBDD.
En esta práctica 9 se ampliará la Práctica 8 Autenticación para poder registrar que usuario ha sido el autor de cada post.
Para ello se modificará la tabla Posts de la BBDD añadiendo un nuevo campo llamado authorId. En este campo se guardará el id del usuario que ha creado el post, que es el usuario que ha realizado login. Si el usuario que crea el post no se ha logueado, entonces no se guardará ningún valor en el campo authorId.
El desarrollo pedido en esta práctica es prácticamente igual al realizado en el mini proyecto Autores visto en las clases teóricas de la asignatura. En el mini proyecto Autores se registraba quién era el autor de los quizzes creados, y en esta práctica se registrará quién es el autor de los posts creados.
Instrucciones aquí.
En esta práctica hay que continuar y ampliar el desarrollo realizado en la práctica 8.
El alumno debe copiar el directorio blog de la P8_autenticacion en el directorio P9_Autores/blog de esta práctica 9. Las tareas a realizar en esta práctica 9 de desarrollarán dentro del directorio P9_Autores/blog.
Para copiar/duplicar el directorio P8_autenticacion/blog en el directorio P9_Autores/blog, puede usar un explorador de archivos. Asegúrese de copiar el directorio y no de moverlo de sitio, para no perder el trabajo original. También puede ejecutar el siguiente comando en un terminal unix para copiar el directorio y todo su contenido:
$ cp -r PATH_DE_PRACTICA_8/P8_autenticacion/blog PATH_DE_PRACTICA_9/P9_Autores/.
Hay que definir una relación entre los modelos User y Post para indicar que cada post tiene un usuario como autor, y que un usuario puede ser el autor de muchos posts. Esta es una relación 1-a-N.
El alumno tiene que definir esta relación en el fichero models/index.js y cumplir con los siguientes requisitos:
- La clave externa usada para definir esta relación debe llamarse authorId.
- Use el nombre "posts" como alias al indicar que un usuario tiene muchos posts de los que es el autor.
- Use el nombre "author" como alias al indicar que un post pertenece al usuario que ha sido su autor.
El alumno también tiene que crear una migración en un fichero con nombre migrations/YYYYMMDDhhmmss-AddAuthorIdToPostsTabl e.js. Esta migración debe modificar la tabla Posts de la BBDD añadiendo el campo authorId.
Si hay un usuario logueado, éste será el autor de los posts que cree. En este caso se guardará el valor del campo id del usuario, en el campo authorId de cada post creado.
Si no hay usuario logueado, no puede saberse quién es el autor de los nuevos posts creados. En este caso, se dejará vacío el campo authorId de los posts creados.
El alumno debe adaptar el middleware create del controlador de los posts para ver si hay un usuario logueado o no, y asignar el valor adecuado al campo authorId del post que está creando.
En esta tarea el alumno debe modificar las vistas views/posts/show.ejs y
views/posts/index.ejs para presentar el nombre del autor (username
) de cada post mostrado.
Si algún post no tiene autor, debe mostrarse el texto Anonymous en vez del nombre del autor.
Para mostrar el nombre, se puede utilizar cualquier etiqueta HTML, pero se debe utilizar el id author en el caso de la
vista que muestra un post (views/posts/show.ejs), y la clase author en el caso del índice de posts (views/posts/index.ejs).
Cuando se renderizan las vistas anteriores, el autor de cada post debe estar accesible en la propiedad author de los objetos Post sacados de la base de datos. Para ello se debe realizar una carga ansiosa de los autores al recuperar los posts de la BBDD. El alumno debe usar la opción include para cargar los autores de los posts en las llamadas a findByPk y a findAll que se realizan en los métodos load e index del controlador de los posts.
LLegados a este punto ya se ha terminado todo el desarrollo de la práctica.
Solo falta aplicar la migración creada en la tareas anteriores ejecutando:
$ npm run migrate ## sistemas unix
$ npm run migrate_win ## sistemas windows
y probar el funcionamiento del nuevo servidor.
Instrucciones aquí.
Instrucciones aquí.
Capturas a entregar con esta práctica:
- Captura 1: Captura de la pantalla que muestra el listado de todos los posts. Deben verse varios posts con sus imágenes adjuntas, y el nombre de su autor.
![captura de pantalla](https://user-images.githubusercontent.com/716928/218466803-67df6944-2c9d-4838-80f1-f26c15554482.png)
- Captura 2: Captura de una pantalla que muestre un post que no tenga autor. Debe mostrarse el contenido del post con su imagen adjunta, y anónimo como nombre del autor.
![captura de pantalla](https://user-images.githubusercontent.com/716928/218466838-b6f50c23-8948-49c5-90d4-f3024e4bcf20.png)
- Captura 3: Captura de una pantalla que muestre un post que tenga autor. Debe mostrarse el contenido del post con su imagen adjunta, y el nombre del autor.
![captura de pantalla](https://user-images.githubusercontent.com/716928/218466853-9371054d-80cf-4f9a-806b-41945c40091c.png)
Instrucciones aquí.
Se puntuará el ejercicio a corregir sumando el % indicado a la nota total si la parte indicada es correcta:
- 20%: Si hay un usuario logueado y crea un post, entonces el campo authorId del post debe ser igual al id del usuario logueado.
- 15%: Si no hay un usuario logueado y se crea un post, entonces el campo authorId del post debe estar vacío.
- 20%: Si un post tiene autor, entonces la vista show de ese post debe mostrar el nombre del autor.
- 15%: Si un post no tiene autor, entonces la vista show de ese post debe mostrar el texto Anonymous como nombre del autor.
- 30%: La vista index debe mostrar el nombre del autor o el texto Anonymous para todos los posts listados.
Si pasa todos los tests se dará la máxima puntuación.