Alumno: David Moreno Martín
Tutor: Micael Gallego Carrillo
-
Blog LogArt: Construyendo una Aplicación Full-Stack MERN: Empezando con el Backend.
-
Blog LogArt: Construyendo una Aplicación Full-Stack MERN: Frontend.
-
Blog LogArt: Testeo e2e en LogArt: Asegurando la Calidad con Jest, Supertest y Playwright.
-
Blog LogArt: Docker y Docker Compose en LogArt: Simplificando el Desarrollo y Despliegue
Disciplina: videojuegos, Libros, Canciones.
Objeto: Videojuego, libro o canción perteneciente a una disciplina.
Galería: Conjunto de objetos bajo una misma disciplina conforman la galería de esa disciplina.
Comentario: Mensaje o post que escribe un Usuario dentro de un Objeto de su propiedad
Relación KeyWords: Un Usuario crea un Objeto dentro de una de las tres Disciplinas. Se podría decir que ese Objeto ahora está en la Galería de esa Disciplina. Además, el Usuario puede crear comentarios bajo ese Objeto
Ejemplo KeyWords: El Usuario David crea el Objeto “Harry Potter” dentro de la Disciplina Libros. La Galería de Libros del usuario ahora tiene un nuevo Objeto, y el Usuario decide escribir un Comentario dentro ese objeto poniendo “¡Voldemort mola!”
Las entidades son Usuario, Disciplina, Objetos y Comentarios.
Están relacionadas de la siguiente forma: Un Usuario escoge una Disciplina, y crea un Objeto dentro de ella. A su vez el Usuario puede crear Comentarios dentro de los Objetos creados.
-
Autenticación y autorización de usuarios:
- Registro de usuarios con verificación de email.
- Login/logout seguro.
- Diferentes roles: no registrado, registrado y administrador.
-
Gestión de objetos y disciplinas:
- Crear, editar y eliminar objetos dentro de las disciplinas (Libros, Canciones, videojuegos)
- Filtrar y buscar objetos por nombre.
- Subida de imágenes relacionadas con los objetos.
- Mostrar la galería de objetos por disciplina.
-
Comentarios:
- Permitir a los usuarios registrados crear, editar y eliminar comentarios sobre sus objetos.
- Visualización de comentarios para cada objeto de forma correcta, dentro del propio objeto.
- Moderación de comentarios por parte de administradores.
-
Perfiles de usuarios:
- Creación y edición del perfil, incluyendo la subida de una foto de perfil.
-
Autenticación y autorización de usuarios:
- Recuperación de contraseña a través de email.
-
Gestión de objetos y disciplinas:
- Compartir objetos con otros usuarios y que estos puedan verlos aún sin estar logeados.
- Sistema de favoritos o “me gusta” para poder filtrarlos de esa manera.
-
Dashboard de administrador:
- Creación de un panel de control donde el administrador puede visualizar diferentes gráficos y datos sobre el desempeño de la aplicación.
- Moderación de objetos por parte de administradores, en el dashboard, dispondrán de una pestaña para ver todos los objetos de la aplicación.
-
Gestión de datos:
- Algoritmo de análisis de crecimiento, que muestre el aumento o disminución porcentual en un periodo de tiempo.
- Algoritmo de análisis de crecimiento, que muestre el aumento o disminución porcentual en un periodo de tiempo.
Usuario No registrado: Podrá ver los objetos de la galería de un usuario, siempre y cuando esa persona haya decidido compartir dicho objeto. No podrá crear ni editar objetos dentro de ninguna galería.
Usuario registrado: Podrá ver los objetos de la galería de otro usuario, siempre y cuando esa persona haya decidió compartir dicho objeto. Además, podrá crear nuevos objetos en cada galería y editarlos/eliminarlos a su gusto.
Si los objetos son suyos, dentro podrá añadir/editar/eliminar comentarios sobre su experiencia, y dependiendo del tipo de galería en la que esté el objeto, podrá también añadir una imagen de un mapa (videojuegos) o los autores (libros y Canciones) de dicho objeto.
Usuario administrador: En el caso del administrador, podrá ver las galerías y los objetos de todos los usuarios registrados en la aplicación, hayan decidido compartirlos o no. Además de esto, también podrá eliminar los objetos que considere que no son apropiados.
De forma similar, también podrá eliminar los comentarios que existan dentro de cada objeto. Por último el administrador dispondrá de una página especial, en la que podrá ver una serie de estadísticas y gráficos relacionados con el funcionamiento de la aplicación y la creación de objetos/comentarios.
Relacionado con lo comentado en el punto anterior, los permisos de los usuarios varían dependiendo del tipo de usuario:
Usuario anónimo: No tiene ningún tipo de permiso/responsabilidad, no es dueño de ningún dato/entidad, solo puede ver los objetos de las galerías de ciertos usuarios si ellos así lo desean.
Usuario registrado: Tendrá permiso para añadir/eliminar objetos dentro de las galerías, así como los comentarios e imágenes dentro de cada objeto. Será dueño de las entidades Objeto y Comentarios siempre que hayan sido creadas por él.
Usuario administrador: Tiene todos los permisos posibles, incluyendo la eliminación de objetos/comentarios de cualquier usuario que no sea administrador, y la posibilidad de entrar a objetos de galerías que los usuarios no hayan decidido compartir. Será dueño de las entidades Objeto y Comentarios, sin importar quien las haya creado
La web permitirá la subida de imágenes en varios sentidos, el primero de ellos a la hora de crear/modificar el perfil, donde podrás añadir una foto de tu gusto. Luego, cuando creas un nuevo objeto, podrás añadir la imagen que mejor represente ese objeto según tu opinión.
Por último, también podrás añadir una imagen dentro de los objetos de la galería “Videojuegos” siendo esta imagen el mapa del juego.
Por lo tanto, las entidades asociadas con imágenes son: Usuario (foto de perfil) y Objeto (imagen de objeto, y mapa si la disciplina es videojuego)
En la pantalla de administrador se mostrarán 2 gráficos, ambos sobre una medida de tiempo (días, meses...)
El primero, sobre los objetos creados por parte de los usuarios, y el segundo sobre los comentarios creados dentro de los objetos.
Estos gráficos serán de barra en principio, pudiendo cambiar el estilo en un futuro si el hacerlo refleja mejor los datos.
Como tecnología complementaría, la web empleará un método de verificación después de registrarse, este método se implementará enviando un correo a los usuarios, que deberán recibir y aceptar para poder usar la aplicación
En la pestaña de administrador, se mostrarán el número de objetos y comentarios creados por unidad de tiempo, junto a sus respectivos gráficos.
El algoritmo/consulta avanzada consistirá en averiguar (y mostrar en la pantalla) el aumento/disminución en porcentaje de estos.
Por ejemplo -> Objetos totales: 1.239, +20.4% con respecto al mes pasado. (Reflejado en el wireframe para entenderlo mejor)
Cuenta con una flecha semitransparente abajo para indicar que se puede hacer scroll. También con un botón para pasar directamente a la pantalla de registro.
Para poder usar la app con todas sus funcionalidades debes estar registrado, pero puedes usar la función de ver objetos de otros usuarios aún sin registrarte (siempre que ellos decidan ponerlos públicos). Para ello, pulsaremos en el botón del menú arriba a la derecha y buscaremos por username.
Al bajar un poco, tienes el carrusel, donde se muestran varios ejemplos en pequeño, y siguiendo el estilo del disco de vinilo, es un carrusel infinito donde se van repitiendo las imágenes.
Por último, abajo del todo tenemos la última sección de la página principal para los no registrados. Un slider en el cual puedes elegir entre varias fotos, para hacerte una idea de cuáles son las 3 disciplinas con las que trabaja nuestra aplicación
Aquí podremos registrarnos, para así usar la aplicación en su totalidad, creando objetos y comentarios sobre nuestra experiencia dentro de ellos.
Para registrarse necesitas un username, un email válido, y una contraseña. Es importante que el email sea correcto y verificable, ya que necesitarás superar una comprobación adicional vía mail para poder completar el registro.
Para logearse, será necesario introducir el username y la contraseña de tu usuario.
Es importante que el email esté validado antes de hacer el login, de lo contrario no podremos acceder a nuestra cuenta.
Esta será la única vez que se verá la pantalla (por sesión), ya que después podrás cambiar entre galerías desde la propia galería.
Al lado de ese botón, habrá otro para añadir nuevos objetos a la galería.
En cada uno de estos objetos aparecerá un nombre, una foto, un corazón para añadirlo a favoritos, una papelera para eliminar el objeto, y una opción para compartir el objeto con el resto de personas (usuarios y no usuarios de la aplicación)
Además podrás publicar comentarios sobre tu experiencia con ese objeto.
Por último, también podrás editarlo, tanto el objeto en sí, (foto y nombre), como los comentarios/mapa/autores del objeto.
Para hacerlo clicaremos en el menú desplegable del header e iremos a perfil.
Aquí se reflejarán una serie de estadísticas y gráficos ya comentados en la parte de "Gráficos" y "Algoritmo o consulta avanzada"
Aquí podremos obtener más información sobre los propietarios de la web.
- Abrir el terminal y situarnos en la carpeta Backend
\2024-logart\LogArtApp\backend>
- Backend corriendo para inicializar la base de datos
npm start
- Abrir el terminal y situarnos en la carpeta Backend
\2024-logart\LogArtApp\backend>
- Backend corriendo para inicializar la base de datos
npm start
- Situarnos en la carpeta Frontend
\2024-logart\LogArtApp\frontend\LogArt-frontend>
- Servir la aplicación con Vite
npm run dev
- Ejecutar el comando
npm test
- Con el siguiente comando podemos ejecutar los tests de forma interactiva, mientras vemos en tiempo real en un navegador las pruebas
npx playwright test --ui
- Con el siguiente comando podemos ejecutar los tests de forma automática, hay que tener en cuenta que para que algunos test funcionen se requieren estados específicos, y si no se tiene en cuenta puede que algunos test fallen. Por ejemplo, si el test de crear objeto lo intenta hacer sin estar logueado, el test fallará
npx playwright test --project=chromium
- Docker instalado (Guía de instalación)
- Docker Compose instalado (Guía de instalación)
- Tener cuenta en dockerhub y loguearse (Guía)
- Abrir el terminal y situarnos en la carpeta raiz del proyecto
\2024-logart>
- Navegar a la carpeta LogArtApp
cd .\LogArtApp\
- Ejecutar el comando para construir la imagen, con el tag (-t) y con su ubicación (-f)
docker build -t nombre_usuario/nombre_imagen:tag -f docker/Dockerfile .
- En este caso:
docker build -t davidmorenoo/logartapp:latest17 -f docker/Dockerfile .
- Abrir el terminal y situarnos en la carpeta docker
cd .\docker\
- Ejecutar el comando para subir la imagen a dockerhub
docker push nombre_usuario/nombre_imagen:tag
- En este caso:
docker push davidmorenoo/logartapp:latest17
- Desde la misma carpeta docker, debemos tener un archivo docker-compose.yml
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/12/2024 19:46 78 .dockerignore
-a---- 11/12/2024 20:14 527 .env
-a---- 11/12/2024 21:28 925 docker-compose.yml
-a---- 11/12/2024 19:21 785 Dockerfile
- Ejecutar el comando para levantar la aplicación
docker compose up
- Ahora, tenemos acceso a la aplicación desde el navegador dirigiendonos a https://localhost
-Notas, al usar certificados SSL autofirmados, el navegador puede mostrar una advertencia de seguridad. Deberás clicar en "configuración avanzada" y en "Acceder a localhost (sitio no seguro)".
- Después de haber realizado algún cambio en la aplicación (por ejemplo, crear un nuevo objeto), y con el contenedor todavía arrancado, abrimos el terminal y nos situamos en la misma carpeta docker, donde debemos ejecutar el comando
docker exec -it docker-mongo-1 mongosh --username davidmoreno --password hRcZqOOBm6ick63X --authenticationDatabase admin
- Ahora, podemos hacer consultas a la base de datos. Para ver el nuevo objeto, escribimos
use logartdb
show collections
db.objects.find().pretty()
- Una vez hayamos terminado de usar la aplicación, nos dirigimos a la carpeta docker y ejecutamos el comando
docker compose down
- Con esto, el contenedor se detendrá y se eliminará. Para volver a usar la aplicación, deberemos volver a ejecutar el comando
docker compose up