- IMPORTANT: this project is affected by the CVE-2021-45105 vulnerability.
Simulación de compra y venta online.
Reportar un bug
·
Solicitar una nueva funcionalidad
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:
- 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.
- 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.
- UML principal:
- UML de controlladores
- Modelo E/R
- Infraestructura
- Endpoints del Servicio Interno en el siguiente enlace.
Pantalla principal, home
Pantalla para crear usuario, sing up
Pantalla para acceder al sistema, sing in
Pantalla principal de la tienda, marketplace
Para descargar una copia local del proyecto sigue los siguientes pasos 🚀
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.
- Clona el repositorio.
git clone https://github.com/AlvaroMartinezQ/clickandbuy.git
- 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
- En primer lugar debemos de descargar VM VirtualBox del siguiente enlace.
- Ahora procedemos a configurar e instalar la VM, para ello hemos seguido el siguiente enlace. En nuestro caso hemos instalado el sistema operativo Ubuntu.
- Para la instalación del jdk y jre 11 hemos utilizado la siguiente referencia.
- Instalacion de mysql desde el terminal de Ubuntu:
$ sudo apt update
$ sudo apt install mysql-server
$ sudo mysql_secure_installation
$ sudo mysql
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
mysql> flush privileges;
mysql> create user 'newuser'@'localhost' identified by '1234';
mysql> grant all privileges on *.* to 'test'@'localhost' with grant option;
mysql> create schema clickandbuy
mysql> exit;
El punto 4 es un resumen del siguiente enlace.
Crear un usuario y entrar al sistema:
Modificación de datos personales de un usuario:
Subida de un producto:
1 ejemplo de como pedir reportes de usuarios o información personal.
Ejemplo con dos cuentas simultáneas en diferentes navegadores del chat del sistema:
TODO: mapa de desarrollo (semanas, hitos, metas...)
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.
Todo el nuevo código debe de subirse a una nueva rama, ¡no subir cambios directamente a la rama master!
- Crea la rama para tu desarrollo (
git checkout -b feature-<nombre de la nueva característica>
). - Haz commit de tus cambios, no pases los 50 caracteres en la descripcion (
git commit -m 'feature: '<descripción>'
). - Sube tu rama (
git push origin <nombre de la rama>
). - Abre una pull request, opcional.
Si quieres mergear ramas sigue los siguientes pasos:
Primero, desde la rama que quieres mergear:
- Descarga posibles cambios, actualiza la rama (
git pull
). - Mergea tu rama con la rama principal de desarrollo, en este caso dev (
git merge dev
). - Si no presenta conflictos, cambia a la rama de desarrollo (
git checkout dev
).
Segundo, desde la rama de desarrollo:
- Descarga posibles cambios, actualiza la rama (
git pull
). - Mergea la rama que acabas de desarrollar (
git merge <rama a mergear>
). - Sube la rama actualizada (
git push
). - Borra tu rama de trabajo de tu entorno local (
git branch -d <rama a borrar>
). - Borra tu rama del repositorio (
git push -d origin <rama a borrar>
).
Este proyecto está sujeto a la licencia Apache License 2.0
. Para obtener más información sobre esta, acceder al fichero LICENSE.
- Alvaro Martinez - a.martinezq.2017@alumnos.urjc.es - Github
- Patricia Tarazaga - p.tarazaga.2018@alumnos.urjc.es - Github
- Luis Blay - l.blay.2017@alumnos.urjc.es - Github