Skip to content

E-commerce web simulation. Dockerized services, load balancer, redis... Developmenf of distributed applications, 2021 📡

License

Notifications You must be signed in to change notification settings

AlvaroMartinezQ/clickandbuy

Repository files navigation

Contributors Forks Stargazers Apache 2.0

- This project is most likely affected by the CVE-2021-45105 vulnerability and is not updated!

Logo

Click & Buy

Simulación de compra y venta online.
Reportar un bug · Solicitar una nueva funcionalidad

Tabla de contenidos

  1. Acerca del proyecto
  2. Empecemos
  3. Uso
  4. Mapa de desarrollo
  5. Contribuciones
  6. Licencia
  7. Contacto
  8. Agradecimientos

Acerca del proyecto

Proyecto de la asignatura de Desarrollo de Aplicaciones Distribuidas del grado de Ingeniería de Computadores de la Universidad Rey Juan Carlos, Madrid, España. El objetivo principal de la aplicación es dar funcionalidad a una simulación de una tienda de compra de objetos.

La idea principal es el desarrollo de una tienda de venta online, en donde hay productos, los cuales son proporcionados por usuarios (proveedores), y a su vez, estos pueden ser comprados por otros usuarios. Por otro lado, la gestión de la tienda es llevada a cabo por los administradores de la misma, los cuales podrán añadir, dar de baja o eliminar productos. También gestionar la página web y a sus usuarios. El registro de usuario será gratuito, sin embargo, se podrán visualizar productos sin necesidad de estar registrado. Un usuario podrá añadir productos a su cesta de la compra de forma preliminar a su compra. Cuando éste haya finalizado, se generará un pedido que será registrado en el sistema, contando con el usuario dueño del pedido, los productos que lo forman, el precio... etc.

Partes del servicio principal:

  • La parte pública del sistema será la posibilidad de crear usuarios para navegar por la web.
  • La parte privada del sistema será la compra de productos, el acceso al perfil del usuario, el acceso al merketplace del sistema, el uso del sistema de ranking, la publicación de productos, la administración y gestión de la web... Entre otros.

La aplicación dispondrá de dos sistemas:

  • Sistema de compra - venta: descrito anteriormente.
  • Sistema interno de información: la aplicación principal se comunicará con un servicio externo de generación de datos sobre la tienda (pedidos, stock, usuarios...). También dispone de un chat en directo desarrollado con web sockets.

Entidades:

  • Usuario
	Esta entidad representa a los usuarios del sistema.
	* Cada usuario tendrá, si es proveedor, tantos productos como este quiera publicar.
  • Administradores
	Esta entidad representa a los administradores del sistema.

Hay 2 roles de administradores principales del sistema, estos son:

▶️ Manager: este usuario será el responsable de la tienda y/o jefe. Habrá un Manager inicial, ya que con éste usuario, podremos dar de alta nuevos administradores, dar de baja usuarios, modificar y eliminar productos, limpiar ratings, modificar valores en las tablas...

▶️ Staff: este usuario será responsable de controlar los productos y resolver dudas por el chat del sistema.

  • Producto
	Esta entidad representa a los productos del sistema.
  • Pedido
	Esta entidad representa a los pedidos del sistema.
	* Trendrá una clave foránea referente al usuario que realiza el pedido.
	* Cada pedido generado tendrá una lista de carritos.

▶️ Los pedidos funcionarán de la siguiente manera: cada vez que se crea un nuevo pedido se crea un meta-pedido que contiene tantas unidades de ese producto como el pedido al que corresponde. La entidad Pedido también tendrá una clave foránea al usuario que lo ha solicitado.

  • Carro
	Esta entidad representa el carrito de compras del sistema.
	* El carrito está compuesto de productos.
  • Rating
	Esta entidad representa a los ratings de los pedidos.
	* Tendrá una clave foránea referente al usuario que compra un producto.
	* Tendrá una clave foránea al producto en cuestión.

Diagramas de la aplicación
  • UML principal:
uml
  • UML de controlladores
uml
  • Modelo E/R
modeler
  • Infraestructura
modeler
  • Endpoints del Servicio Interno en el siguiente enlace.

Pantallas de navegación


Pantalla principal, home

modeler
Pantalla para crear usuario, sing up modeler
Pantalla para acceder al sistema, sing in modeler
Pantalla principal de la tienda, marketplace modeler

Tecnologías

Empecemos

Para descargar una copia local del proyecto sigue los siguientes pasos 🚀

Pre requisitios

Pasos:

  • Maven
     Instalar Maven para correr las aplicaciones.

En caso de descargar el repositorio en local:

  • MySQL Instalar MySQL Server en local.
    Levantar una instancia de MySQL Server.
    Crear una base de datos con el nombre que prefieras. Recomendamos .
    Opcional: crear un usuario y darle privilegios en la base de datos creada. Si no, utilizar el usuario root del sistema.

    Renombrar el fichero application.properties.template dentro de clickandbuy-app a application.properties en la carpeta donde este se encuentra. Cambiar la BD usada (el nombre) al igual que el usuario y su contraseña. Renombrar el fichero application.properties.template dentro de clickandbuy-api a application.properties (en este caso no hacen falta más cambios en el fichero).
    Completar el fichero application.properties con tu usuario, contraseña y nombre de la DB recién creados.

    También es necesario renombrar los ficheros config.properties.template a config.properties en ambas aplicaciones e incluir un cliente de correo GMAIL (dirección de email) y su contraseña para que la aplicación sea capaz de enviar correos electrónicos, si no este apartado de la aplicación no funcionará. Sin embargo la aplicación es completamente funcional sin estos datos (imprimirá un mensaje por consola pero se puede obviar).

  • Docker: No aseguramos el correcto funcionamiento con Docker sobre un host con SO Windows. Todas las pruebas han sido realizadas a través de Linux.

    docker-compose up

Dependiendo desde la rama que se lance el proyecto se crearán una serie de contenedores. Se acede a la web a través de la IP estática que se le ha asignado al contenedor en el fichero YML y este ya redirecciona ese tráfico a cada web.

Instalación

  1. Clona el repositorio.
    git clone https://github.com/AlvaroMartinezQ/clickandbuy.git
  2. Levantar instancias de las APPs. Navegar a las carpetas del proyecto en dos terminales diferentes.

Si se quiere correr la aplicación sin ficheros JAR. Desde la carpeta raíz del proyecto lanzar el siguiente comando en ambas terminales previamente abiertas:

mvn spring-boot:run

Si se quiere correr la aplicación con ficheros JAR. Desde la carpeta raíz del proyecto lanzar el siguiente comando en ambas terminales previamente abiertas para compilar las aplicaciones:

mvn package

Navegar a la carpeta target del proyecto y lanzar el siguiente comando en ambas terminales previamente abiertas:

java -jar clickandbuy-app-0.0.1-SNAPSHOT.jar
java -jar clickandbuy-api-0.0.1-SNAPSHOT.jar

Despliegue de la máquina virtual

  1. En primer lugar debemos de descargar VM VirtualBox del siguiente enlace.
  2. Ahora procedemos a configurar e instalar la VM, para ello hemos seguido el siguiente enlace. En nuestro caso hemos instalado el sistema operativo Ubuntu.
  3. Para la instalación del jdk y jre 11 hemos utilizado la siguiente referencia.
  4. Instalacion de mysql desde el terminal de Ubuntu:
Instalación
$ sudo apt update
$ sudo apt install mysql-server
Configuración
$ sudo mysql_secure_installation
Añadimos una clave a root
$ sudo mysql
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
Recargamos los privilegios de las tablas
mysql> flush privileges;
Si deseamos crear un usuario, podemos hacer lo siguiente (en nuestro caso no lo hemos hecho)
mysql> create user 'newuser'@'localhost' identified by '1234';
Añadimos permisos al nuevo usuario
mysql> grant all privileges on *.* to 'test'@'localhost' with grant option;
Crear un esquema
mysql> create schema clickandbuy
Si deseamos salir del terminal
mysql> exit;
El punto 4 es un resumen del siguiente enlace.

Uso

Servicio principal

Crear un usuario y entrar al sistema:

createUserAccount

Modificación de datos personales de un usuario:

changeUserInfo

Subida de un producto:

uploadProduct

Servicio interno

1 ejemplo de como pedir reportes de usuarios o información personal.

requestUserInfo

Ejemplo con dos cuentas simultáneas en diferentes navegadores del chat del sistema:

chatExample

Mapa de trabajo

TODO: mapa de desarrollo (semanas, hitos, metas...)

Contribuciones

Las contribuciones a este proyecto están cerradas ya que es un desarrollo de aplicación para un proyecto final de la universidad. Sin embargo, el reporte de algún bug se apreciará por los desarrolladores. :octocat:

Todo el nuevo código debe de subirse a una nueva rama, ¡no subir cambios directamente a la rama master!

  1. Crea la rama para tu desarrollo (git checkout -b feature-<nombre de la nueva característica>).
  2. Haz commit de tus cambios, no pases los 50 caracteres en la descripcion (git commit -m 'feature: '<descripción>').
  3. Sube tu rama (git push origin <nombre de la rama>).
  4. Abre una pull request, opcional.

Si quieres mergear ramas sigue los siguientes pasos:

Primero, desde la rama que quieres mergear:

  1. Descarga posibles cambios, actualiza la rama (git pull).
  2. Mergea tu rama con la rama principal de desarrollo, en este caso dev (git merge dev).
  3. Si no presenta conflictos, cambia a la rama de desarrollo (git checkout dev).

Segundo, desde la rama de desarrollo:

  1. Descarga posibles cambios, actualiza la rama (git pull).
  2. Mergea la rama que acabas de desarrollar (git merge <rama a mergear>).
  3. Sube la rama actualizada (git push).
  4. Borra tu rama de trabajo de tu entorno local (git branch -d <rama a borrar>).
  5. Borra tu rama del repositorio (git push -d origin <rama a borrar>).

Licencia

Este proyecto está sujeto a la licencia Apache License 2.0. Para obtener más información sobre esta, acceder al fichero LICENSE.

Contacto

Agradecimientos