El proyecto es una aplicación web basada en Node.js que proporciona una plataforma para gestionar usuarios, categorías y productos. La aplicación y cumple con los siguientes requerimientos:
-
Autenticación de Usuarios: La aplicación permite a los usuarios registrarse, iniciar sesión y obtener un JWT (JSON Web Token) después de la autenticación.
-
Gestión de Usuarios:
- CRUD de Usuarios: Los usuarios pueden realizar operaciones CRUD (Crear, Leer, Actualizar y Eliminar) en su perfil de usuario.
-
Gestión de Categorías:
- CRUD de Categorías: Los usuarios autenticados pueden realizar operaciones CRUD en categorías.
-
Gestión de Productos:
- CRUD de Productos: Los usuarios autenticados pueden realizar operaciones CRUD en productos.
-
API para Detalles del Usuario:
- Obtener Categorías y Productos: Se ha implementado una API que permite obtener todas las categorías y productos que un usuario ha creado, proporcionando su identificador como parámetro. Esta API requiere un JWT válido para autorizar la solicitud.
- Autenticación de Usuarios con JWT.
- CRUD de Usuarios, Categorías y Productos.
- API para obtener las creaciones de un usuario.
- Node.js
- Express.js
- PostgreSQL
- Sequelize ORM
- JSON Web Tokens (JWT)
Asegúrate de tener Node.js y PostgreSQL instalados en tu sistema.
- Clona este repositorio.
- Ejecuta
npm installpara instalar las dependencias. - Crea una base de datos PostgreSQL y llamala como gustes.
- Copia el archivo
.env.examplea.envy configura las variables de entorno necesarias, como las credenciales de la base de datos. - Ejecuta
npm run migratepara aplicar las migraciones a la base de datos. - Ejecuta
npm startpara iniciar la aplicación.
Este proyecto utiliza un archivo .env para almacenar variables de entorno sensibles. Debes crear este archivo y configurar las siguientes variables:
PORT: El puerto en el que se ejecutará la aplicación.SECRET_KEY: Una clave secreta para la autenticación.DB_NAME: El nombre de la base de datos PostgreSQL.DB_USERNAME: El nombre de usuario de PostgreSQL.DB_PASSWORD: La contraseña de PostgreSQL.DB_HOST: La dirección del host de PostgreSQL.CORS_HOST: El host permitido para las solicitudes CORS.
Asegúrate de copiar el archivo .env.example a .env y configurar estas variables con los valores adecuados. Aquí tienes un ejemplo:
PORT=3000
SECRET_KEY=mi_clave_secreta
DB_NAME=mi_basededatos
DB_USERNAME=mi_usuario
DB_PASSWORD=mi_contraseña
DB_HOST=localhost
CORS_HOST=http://localhost:3000A continuación, se describen los pasos para utilizar la API y se proporcionan ejemplos de comandos y código para cada uno de los endpoints.
/api/usuarios: Endpoint para gestionar usuarios./api/products: Endpoint para gestionar productos./api/categories: Endpoint para gestionar categorías./api/userDetails/: Endpoint para recopilar los productos y categorias creado por un usuario en especifico.
Para registrar un nuevo usuario, realiza una solicitud POST a la siguiente URL:
Ejemplo de solicitud utilizando cURL:
curl -X POST -H "Content-Type: application/json" -d '{
"name": "Nombre del Usuario",
"email": "correo@ejemplo.com",
"password": "contraseña"
}' http://localhost:PUERTO/api/usuarios/registrarPara iniciar sesión y obtener un JWT (JSON Web Token) y una cookie de sesión, realiza una solicitud POST a la siguiente URL:
POST /api/usuarios/loginEjemplo de solicitud utilizando cURL:
curl -X POST -H "Content-Type: application/json" -d '{
"email": "correo@ejemplo.com",
"password": "contraseña"
}' http://localhost:PUERTO/api/usuarios/login
Para obtener todos los usuarios registrados, realiza una solicitud GET a la siguiente URL:
GET /api/usuariosEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/usuarios
Para obtener los detalles de un usuario por su ID, realiza una solicitud GET a la siguiente URL, reemplazando ID_DEL_USUARIO con el ID del usuario:
GET /api/usuarios/ID_DEL_USUARIOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/usuarios/ID_DEL_USUARIOPara actualizar los datos de un usuario, realiza una solicitud PUT a la siguiente URL, reemplazando ID_DEL_USUARIO con el ID del usuario:
PUT /api/usuarios/ID_DEL_USUARIOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X PUT -H "Authorization: Bearer TU_JWT" -H "Content-Type: application/json" -d '{
"name": "Nuevo Nombre",
"email": "nuevo_correo@ejemplo.com"
}' http://localhost:PUERTO/api/usuarios/ID_DEL_USUARIOPara eliminar un usuario, realiza una solicitud DELETE a la siguiente URL, reemplazando ID_DEL_USUARIO con el ID del usuario:
DELETE /api/usuarios/ID_DEL_USUARIOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X DELETE -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/usuarios/ID_DEL_USUARIOPOST /api/productsEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X POST -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" -H "Content-Type: application/json" -d '{
"name": "Nombre del Producto",
"unit_price": 100
}' http://localhost:PUERTO/api/productsPara obtener todos los productos, realiza una solicitud GET a la siguiente URL:
GET /api/productsEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/products
Para obtener los detalles de un producto por su ID, realiza una solicitud GET a la siguiente URL, reemplazando ID_DEL_PRODUCTO con el ID del producto:
GET /api/products/ID_DEL_PRODUCTOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/products/ID_DEL_PRODUCTOPara actualizar los datos de un producto, realiza una solicitud PUT a la siguiente URL, reemplazando ID_DEL_PRODUCTO con el ID del producto:
PUT /api/products/ID_DEL_PRODUCTOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X PUT -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" -H "Content-Type: application/json" -d '{
"name": "Nuevo Nombre de Producto",
"unit_price": 150
}' http://localhost:PUERTO/api/products/ID_DEL_PRODUCTORecuerda reemplazar PUERTO, TU_JWT y VALOR_DE_LA_COOKIE con los valores adecuados.
Para crear una nueva categoría, realiza una solicitud POST a la siguiente URL:
POST /api/categoriesEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X POST -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" -H "Content-Type: application/json" -d '{
"name": "Nombre de la Categoría"
}' http://localhost:PUERTO/api/categoriesPara obtener todas las categorías, realiza una solicitud GET a la siguiente URL:
GET /api/categoriesEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/categoriesPara obtener los detalles de una categoría por su ID, realiza una solicitud GET a la siguiente URL, reemplazando ID_DE_LA_CATEGORÍA con el ID de la categoría:
GET /api/categories/ID_DE_LA_CATEGORÍAEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/categories/ID_DE_LA_CATEGORÍAPara actualizar los datos de una categoría, realiza una solicitud PUT a la siguiente URL, reemplazando ID_DE_LA_CATEGORÍA con el ID de la categoría:
PUT /api/categories/ID_DE_LA_CATEGORÍAEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X PUT -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" -H "Content-Type: application/json" -d '{
"name": "Nuevo Nombre de Categoría"
}' http://localhost:PUERTO/api/categories/ID_DE_LA_CATEGORÍAPara eliminar una categoría, realiza una solicitud DELETE a la siguiente URL, reemplazando ID_DE_LA_CATEGORÍA con el ID de la categoría:
DELETE /api/categories/ID_DE_LA_CATEGORÍAEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -X DELETE -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/categories/ID_DE_LA_CATEGORÍAAsegúrate de reemplazar PUERTO, TU_JWT y VALOR_DE_LA_COOKIE con los valores adecuados en cada solicitud.
Para obtener todas las categorías y productos creados por un usuario específico, realiza una solicitud GET a la siguiente URL, reemplazando ID_DEL_USUARIO con el ID del usuario:
GET /api/userDetails/ID_DEL_USUARIOEjemplo de solicitud utilizando cURL (requiere JWT y cookie de sesión):
curl -H "Authorization: Bearer TU_JWT" -b "tu_cookie=VALOR_DE_LA_COOKIE" http://localhost:PUERTO/api/userDetails/ID_DEL_USUARIOAsegúrate de reemplazar PUERTO, TU_JWT y VALOR_DE_LA_COOKIE con los valores adecuados en cada solicitud.
Esta solicitud devolverá los detalles del usuario, incluyendo todas las categorías y productos que ha creado. La respuesta incluirá la información de las categorías y productos, como sus nombres, precios, etc.
La función getUserDetails en el controlador userDetails.controller.js se encargará de buscar al usuario por su ID y recuperar las categorías y productos asociados a él.
Este proyecto utiliza PostgreSQL como base de datos. Asegúrate de haber configurado correctamente la base de datos y aplicado las migraciones antes de ejecutar la aplicación.
Si deseas contribuir a este proyecto, sigue estos pasos:
- Crea un fork del repositorio.
- Crea una rama para tu contribución (
git checkout -b feature/nueva-funcionalidad). - Realiza tus cambios y haz commits (
git commit -m 'Agrega nueva funcionalidad'). - Sube tus cambios a tu fork (
git push origin feature/nueva-funcionalidad). - Abre un pull request en este repositorio.
- Adrian Victor Montesinos Salinas
