Una API REST para gestión de inventario y usuarios construida con Express.js y MongoDB.
- API RESTful - Endpoints CRUD completos para usuarios e inventario
- Validación robusta - Usando Joi para validación de entrada
- Seguridad - Helmet, CORS, hash de contraseñas con bcrypt
- Manejo de errores - Middleware centralizado de manejo de errores
- Variables de entorno - Configuración segura usando dotenv
- Logging - Morgan para logging HTTP
- Paginación - Soporte para paginación en endpoints
- Búsqueda - Funcionalidad de búsqueda en inventario
src/
├── config/ # Configuración de la aplicación
├── database/ # Conexión a MongoDB
├── middleware/ # Middleware personalizado
├── routes/ # Rutas de la API
└── index.js # Punto de entrada de la aplicación
-
Clonar e instalar dependencias:
npm install
-
Configurar variables de entorno: Copia el archivo
.env.examplea.envy configura tus variables:cp .env.example .env
-
Configurar la base de datos: Asegúrate de que tu instancia de MongoDB esté corriendo y actualiza la URI en el archivo
.env.
# Desarrollo (con nodemon)
npm run dev
# Producción
npm start
# Tests (pendiente de implementar)
npm test| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/users |
Obtener todos los usuarios |
| GET | /api/users/:id |
Obtener usuario por ID |
| POST | /api/users |
Crear nuevo usuario |
| PUT | /api/users/:id |
Actualizar usuario |
| DELETE | /api/users/:id |
Eliminar usuario |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/inventory |
Obtener inventario (con paginación y búsqueda) |
| GET | /api/inventory/:id |
Obtener artículo por ID |
| POST | /api/inventory |
Crear nuevo artículo |
| PUT | /api/inventory/:id |
Actualizar artículo |
| PATCH | /api/inventory/:id/quantity |
Actualizar solo cantidad |
| DELETE | /api/inventory/:id |
Eliminar artículo |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /health |
Verificar estado del servidor |
curl -X POST http://localhost:3000/api/users \
-H "Content-Type: application/json" \
-d '{
"login": "johndoe",
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com",
"password": "securepassword123",
"phone": "+1234567890",
"address": "123 Main St"
}'curl -X POST http://localhost:3000/api/inventory \
-H "Content-Type: application/json" \
-d '{
"id": "PART001",
"product_name": "Filtro de aceite",
"quantity_available": 50,
"stock_location": "Almacén A1"
}'curl "http://localhost:3000/api/inventory?search=filtro&page=1&limit=10"| Variable | Descripción | Valor por Defecto |
|---|---|---|
PORT |
Puerto del servidor | 3000 |
HOST |
Host del servidor | localhost |
NODE_ENV |
Entorno de ejecución | development |
MONGODB_URI |
URI de conexión a MongoDB | mongodb://localhost:27017 |
DB_NAME |
Nombre de la base de datos | TechParts |
BCRYPT_ROUNDS |
Rondas de hash bcrypt | 12 |
JWT_SECRET |
Clave secreta para JWT | Requerido en producción |
CORS_ORIGIN |
Orígenes permitidos para CORS | http://localhost:3000 |
- Hash de contraseñas con bcrypt
- Helmet para cabeceras de seguridad HTTP
- CORS configurado
- Validación de entrada con Joi
- Manejo seguro de errores (sin exposición de stack traces en producción)
Todas las respuestas siguen un formato consistente:
{
"success": true,
"data": { ... },
"message": "Operación exitosa"
}{
"success": false,
"message": "Descripción del error",
"details": ["Error de validación específico"]
}-
Variables de entorno de producción:
- Configura
NODE_ENV=production - Establece un
JWT_SECRETseguro - Configura la URI de MongoDB de producción
- Configura
-
Iniciar en producción:
npm start
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia ISC.