Esta tienda online permite a los usuarios registrarse, iniciar sesión, navegar por un catálogo de productos, añadirlos al carrito y realizar compras.
1º Debes instalar todas las librerias con el comando npm install.
2º Para iniciar en local deberas usar el comando npm run dev.
Registro de usuario: Los usuarios pueden crear una cuenta con su nombre, correo electrónico y contraseña.
Inicio de sesión: Los usuarios pueden acceder a su cuenta con sus credenciales.
Navegación: La tienda ofrece una navegación sencilla por categorías y productos.
Carrito de compra: Los usuarios pueden añadir productos al carrito.
Perfil: Los usuarios pueden ver su información personal.
-
React
-
React Router
-
Context
-
SASS
-
Librerías
-
Antd design
-
Axios
/home
: Página de inicio.
/login
: Página de inicio de sesión.
/register
: Página de registro.
/products
: Página de productos.
/cart
: Página del carrito de compra.
/profile
: Página del perfil del usuario.
- Node.js
- Express
- MySQL con Sequelize
- Bcrypt para cifrado de contraseñas
- Git (uso de ramas, commits legibles)
- Seeders para inicialización de datos
- Supertest
- Jest
- User test
-
Clona el repositorio en tu máquina local.
-
Instala las dependencias utilizando npm install.
-
Configura la base de datos en el archivo de configuración (config/config.json) de Sequelize.
-
Ejecuta las migraciones para establecer la estructura de la base de datos.
-
Utiliza seeders para poblar la base de datos con datos de prueba.
-
Inicia el servidor con el comando npm start.
-
Accede a la API mediante la URL especificada en la documentación.
Asegúrate de configurar las rutas en tu archivo main.js para que la aplicación pueda manejar las solicitudes correctamente. Agrega las siguientes líneas al archivo main.js:
Esto asegurará que las rutas relacionadas con usuarios, productos, categorías y pedidos estén correctamente enlazadas y puedan ser accedidas a través de las URL correspondientes.
- Este endpoint se utiliza para recuperar información detallada de un usuario especifico en nuestra api.
- Ruta:
POST /users
- Controlador:
UserController.create
- Ruta:
GET /users
- Controlador:
UserController.getAll
- Ruta:
POST /users / login
- Controlador:
UserController.login
- Ruta:
GET /users / getUserOrders/:id
- Parámetro:
id
(Identificador del Usuario) - Controlador:
UserController.getUserInfo
- Ruta:
DELETE / users
- Middleware:
authentication
(Middleware de autenticación) - Controlador:
UserController.logout
- Ruta:
GET / categories
- Controlador:
CategoryController.obtenerCategoriasConProductos
- Ruta:
GET /categories /id/:id
- Parámetro:
id
(Identificador de la Categoría) - Controlador:
CategoryController.obtenerCategoriaPorId
- Ruta:
GET / categories /buscar
- Controlador:
CategoryController.buscarCategoriaPorNombre
- Ruta:
POST / categories
- Controlador:
CategoryController.crearCategoria
- Ruta:
DELETE / categories / :id
- Parámetro:
id
(Identificador de la Categoría a borrar) - Controlador:
CategoryController.borrarCategoria
- Ruta:
PUT / categories /:id
- Parámetro:
id
(Identificador de la Categoría a actualizar) - Controlador:
CategoryController.updateCategoria
- Este endpoint se utiliza para recuperar información detallada de los productos en nuestra api.
Este endpoint permite la creación de un nuevo producto. Solo los usuarios autenticados con privilegios de administrador pueden acceder a esta ruta.
- Ruta:
POST /products
- Middleware: authentication, isAdmin
- Controlador:
ProductController.create
- Ruta:
GET/products
- Controlador:
ProductController.getAll
- Ruta:
GET /products/withCategory/:id
- Controlador:
ProductController.getByIdCateg
- Ruta:
GET /products/id/:id
- Controlador:
ProductController.getById
- Ruta:
GET /products/filter/highToLowPrice
- Controlador:
ProductController.highToLow
Actualiza los detalles de un producto específico. Solo los usuarios autenticados con privilegios de administrador pueden acceder a esta ruta.
- Ruta:
PUT /products/id/:id
- Middleware: authentication, isAdmin
- Controlador:
ProductController.updateById
Elimina un producto específico del sistema. Solo los usuarios autenticados con privilegios de administrador pueden acceder a esta ruta.
- Ruta:
DELETE /products/id/:id
- Middleware: authentication, isAdmin
- Método del Controlador:
ProductController.delete
A continuación se detallan los puntos finales (endpoints) disponibles para gestionar pedidos en nuestra API:
- Ruta:
POST /orders
- Controlador:
OrderController.create
- Ruta:
GET /orders
- Controlador:
OrderController.getAll
Este endpoint devuelve todos los pedidos existentes junto con la información detallada de los productos asociados a cada pedido.
A continuación se describen las relaciones entre las tablas principales de nuestra base de datos:
La tabla de Categorías almacena información sobre las distintas categorías de productos disponibles.
- Productos: Una categoría puede tener muchos productos, pero un producto pertenece a una sola categoría.
La tabla de Productos almacena detalles sobre los productos disponibles en nuestra plataforma.
-
Categoría: Cada producto pertenece a una categoría específica.
-
Pedidos: Un producto puede estar presente en muchos pedidos, pero un pedido contiene productos específicos.
La tabla de Usuarios almacena información sobre los usuarios registrados en nuestra aplicación.
- Pedidos: Un usuario puede realizar muchos pedidos, pero cada pedido está asociado a un único usuario.
La tabla de Pedidos registra información sobre los pedidos realizados por los usuarios.
-
Usuarios: Cada pedido está asociado a un único usuario.
-
Productos: Un pedido puede contener muchos productos, y cada producto en el pedido está relacionado con un producto específico.
Implementamos un sistema de verificación por correo electrónico para mejorar la seguridad y la autenticación de los usuarios. A continuación, se describe el proceso y cómo funciona.
-
Registro de Usuario:
- Cuando un usuario se registra en nuestra plataforma, se le pide proporcionar una dirección de correo electrónico válida.
-
Generación de Token de Verificación:
- Después de un registro exitoso, se genera un token de verificación único asociado al usuario.
-
Envío del Correo Electrónico de Verificación:
- Utilizamos Nodemailer para enviar un correo electrónico al usuario recién registrado. Este correo contiene un enlace especial que lleva al usuario a la página de verificación.
-
Verificación del Usuario:
- El usuario hace clic en el enlace del correo electrónico, lo que lo lleva a la página de verificación. Allí, el token se valida y la cuenta del usuario se marca como verificada.
- En el proyecto hemos introducido la prueba de Jest y la Superprueba. La prueba llega al punto final de creación del usuario.
- Para ejecutar la prueba es necesario cambiar el entorno de "Development" a "Test", de la siguiente manera:
export NODE_ENV=test
O si estas en windows prueba:SET NODE_ENV=test
En PowerShell:$env:NODE_ENV="test"
- Puedes iniciar la prueba con el comando
npm run test:watch
- Tenga en cuenta que probará la creación del usuario, incluida la parte del envío de un correo electrónico de confirmación; para esto se requiere una dirección de correo electrónico válida y la contraseña de la aplicación.