API RESTful para un sistema de gestión de inventario. Desarrollada con Node.js, Express, TypeScript y TypeORM. Incluye autenticación JWT, roles de administrador y control de stock.
- Autenticación JWT: Endpoints protegidos para garantizar la seguridad.
- Gestión de Roles: Rutas exclusivas para usuarios administradores (CRUD de usuarios).
- CRUD Completo: Operaciones de Crear, Leer, Actualizar y Eliminar para:
- Usuarios.
- Productos.
- Categorías.
- Gestión de Stock: Endpoints dedicados para registrar entradas y salidas de inventario.
- Historial de Movimientos: Cada entrada y salida de stock se registra para una auditoría completa.
- Búsqueda y Filtros: Endpoint para buscar productos por nombre/descripción o filtrarlos por categoría.
- Validación de Datos: Uso de
class-validatoryexpress-validatorpara asegurar la integridad de los datos de entrada.
- Backend: Node.js, Express, TypeScript
- Base de Datos: MySQL
- ORM: TypeORM
- Autenticación: JWT (jsonwebtoken), bcrypt
- Validación: class-validator, express-validator
- Variables de Entorno: dotenv
Sigue estos pasos para configurar y correr el proyecto en tu entorno local.
- Node.js (v18 o superior)
- Un servidor de base de datos MySQL
-
Clonar el repositorio:
git clone [https://github.com/mariocobian09/api-inventario-nodejs.git](https://github.com/mariocobian09/api-inventario-nodejs.git) cd api-inventario-nodejs -
Instalar dependencias:
npm install
-
Configurar las variables de entorno: Crea un archivo
.enven la raíz del proyecto. Puedes usar el siguiente como plantilla:# Base de Datos DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASS=tu_contraseña_de_mysql DB_NAME=inventario_db # JWT JWT_SECRET=tu_clave_secreta_para_jwt # Puerto del servidor PORT=5000
-
Iniciar la base de datos: Asegúrate de que tu servidor MySQL esté corriendo y que la base de datos
inventario_dbexista. TypeORM la sincronizará automáticamente gracias asynchronize: true. -
Iniciar el servidor de desarrollo:
npm run dev
La API estará disponible en
http://localhost:5000.
El proyecto sigue una arquitectura orientada a servicios, separando las responsabilidades en capas:
src/
├── config/ # Conexión a la BD y otras configuraciones.
├── controllers/ # Manejan las peticiones y respuestas HTTP.
├── middlewares/ # Funciones intermedias (autenticación, validación).
├── models/ # Entidades de TypeORM que definen las tablas de la BD.
├── repositories/ # Abstracción para el acceso directo a la base de datos.
├── routes/ # Definición de los endpoints de la API.
├── schemas/ # DTOs (Data Transfer Objects) con reglas de validación.
├── services/ # Contienen la lógica de negocio principal.
└── utils/ # Funciones de utilidad (JWT, hashing de contraseñas).
La base de la URL es /api.
POST /create-user: Registro de un nuevo usuario.POST /login: Inicio de sesión, devuelve un token JWT.
El resto de las rutas requieren un token de autenticación.
GET /get-all: Obtiene todos los usuarios.GET /:userId: Obtiene un usuario por ID.PATCH /:id: Actualiza un usuario.PATCH /:id/role: Cambia el rol de un usuario.DELETE /:id: Elimina un usuario.
POST /: Crea una nueva categoría.GET /: Obtiene todas las categorías.- ... y el resto de operaciones CRUD.
POST /: Crea un nuevo producto.GET /: Obtiene los productos, con opción de búsqueda (?search=...) y filtro (?category=...).POST /:id/add: Añade stock a un producto.POST /:id/remove: Retira stock de un producto.GET /:id/movements: Obtiene el historial de movimientos de un producto.- ... y el resto de operaciones CRUD para productos.
Mario Geovani Cobian Ayala