Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TechParts Backend API

Una API REST para gestión de inventario y usuarios construida con Express.js y MongoDB.

🚀 Características

  • 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

📁 Estructura del Proyecto

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

🛠️ Instalación

  1. Clonar e instalar dependencias:

    npm install
  2. Configurar variables de entorno: Copia el archivo .env.example a .env y configura tus variables:

    cp .env.example .env
  3. Configurar la base de datos: Asegúrate de que tu instancia de MongoDB esté corriendo y actualiza la URI en el archivo .env.

🔧 Scripts Disponibles

# Desarrollo (con nodemon)
npm run dev

# Producción
npm start

# Tests (pendiente de implementar)
npm test

📡 Endpoints de la API

Usuarios (/api/users)

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

Inventario (/api/inventory)

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

Salud del Sistema

Método Endpoint Descripción
GET /health Verificar estado del servidor

📝 Ejemplos de Uso

Crear Usuario

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"
  }'

Crear Artículo de Inventario

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"
  }'

Buscar en Inventario

curl "http://localhost:3000/api/inventory?search=filtro&page=1&limit=10"

🔒 Variables de Entorno

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

🛡️ Seguridad

  • 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)

📊 Respuestas de la API

Todas las respuestas siguen un formato consistente:

Éxito

{
  "success": true,
  "data": { ... },
  "message": "Operación exitosa"
}

Error

{
  "success": false,
  "message": "Descripción del error",
  "details": ["Error de validación específico"]
}

🚀 Despliegue

  1. Variables de entorno de producción:

    • Configura NODE_ENV=production
    • Establece un JWT_SECRET seguro
    • Configura la URI de MongoDB de producción
  2. Iniciar en producción:

    npm start

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia ISC.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages