API REST desarrollada con NestJS, MongoDB y JWT para gestión de productos y órdenes.
- Framework: NestJS con TypeScript
- Base de Datos: MongoDB con Mongoose
- Autenticación: JWT (JSON Web Tokens)
- Validación: Class-validator y validaciones de dominio completas
- Documentación: Swagger/OpenAPI completamente configurado
- Testing: Jest con tests de integración usando Testcontainers
- Containerización: Docker y Docker Compose completamente configurados
- Arquitectura: Clean Architecture con Domain-Driven Design
- Subida de Archivos: Multer configurado para imágenes de productos
- Manejo de Errores: Filtros globales y excepciones personalizadas
name: Nombre del productosku: Código único del productopicture: Imagen del producto (subida de archivos)price: Precio del producto
id: Identificador únicoclientName: Nombre del clientetotal: Total de la ordenproducts: Lista de productos con cantidades
POST /products- Crear productoGET /products- Listar todos los productosGET /products/:id- Obtener producto por IDPUT /products/:id- Actualizar productoDELETE /products/:id- Eliminar productoGET /products/search- Buscar productos con:- Paginación (
page,limit) - Ordenamiento (
sortBy,sortOrder) - Filtros exactos (
sku) - Búsqueda por criterios (
name,minPrice,maxPrice)
- Paginación (
POST /orders- Crear ordenGET /orders- Listar todas las órdenesGET /orders/:id- Obtener orden por IDPUT /orders/:id- Actualizar ordenDELETE /orders/:id- Eliminar ordenGET /orders/stats/total-last-month- Total vendido último mesGET /orders/stats/highest-order- Orden con mayor monto
POST /auth/register- Registrar usuarioPOST /auth/login- Iniciar sesión (retorna JWT)
- Node.js 18+
- Docker y Docker Compose
- MongoDB (opcional si usas Docker)
- Clonar repositorio
git clone <repository-url>
cd PRODUCTS- Instalar dependencias
npm install- Configurar variables de entorno
# Crear archivo .env (opcional, usa valores por defecto)
MONGODB_URI=mongodb://localhost:27017/products_db
JWT_SECRET=your-secret-key-here
JWT_EXPIRES_IN=24h
PORT=3000Opción 1: Solo MongoDB
docker-compose up mongodb
npm run start:devOpción 2: Aplicación completa
docker-compose up# Desarrollo
npm run start:dev
# Producción
npm run build
npm run start:prod# Todos los tests
npm run test:integration
# Solo autenticación
npm run test:integration:auth
# Solo aplicación completa
npm run test:integration:full-app
# Con cobertura
npm run test:integration:cov
# Modo watch
npm run test:integration:watchnpm run test
npm run test:watch
npm run test:covUna vez ejecutada la aplicación, accede a:
- Swagger UI: http://localhost:3000/api
- API Base: http://localhost:3000
- Registrar usuario:
POST /auth/register
{
"username": "usuario",
"password": "password123"
}- Iniciar sesión:
POST /auth/login
{
"username": "usuario",
"password": "password123"
}- Usar token: Incluir en headers:
Authorization: Bearer <token>
POST /products
Authorization: Bearer <token>
Content-Type: multipart/form-data
name: "Laptop Gaming"
sku: "LAP-001"
price: 1299.99
picture: [archivo]GET /products
Authorization: Bearer <token>GET /products/search?page=1&limit=10&sortBy=price&sortOrder=desc&name=laptop&minPrice=1000
Authorization: Bearer <token>GET /orders
Authorization: Bearer <token>POST /orders
Authorization: Bearer <token>
{
"clientName": "Juan Pérez",
"products": [
{
"productId": "64f8a1b2c3d4e5f6a7b8c9d0",
"quantity": 2
}
]
}src/
├── common/ # Filtros, guards, excepciones
├── config/ # Configuración de la aplicación
├── domain/ # Entidades de dominio
│ └── entities/ # Product, Order, User, OrderItem
├── modules/ # Módulos de la aplicación
│ ├── auth/ # Autenticación JWT
│ ├── products/ # Gestión de productos
│ └── orders/ # Gestión de órdenes
├── app.module.ts # Módulo principal
└── main.ts # Punto de entrada
test/ # Tests de integración
├── auth.integration-spec.ts
├── full-app.integration-spec.ts
└── database-setup.ts
npm run build # Compilar aplicación
npm run start # Ejecutar en producción
npm run start:dev # Ejecutar en desarrollo
npm run start:debug # Ejecutar con debug
npm run lint # Linter
npm run format # Formatear código
npm run test # Tests unitarios
npm run test:integration # Tests de integración- Verificar que MongoDB esté ejecutándose
- Revisar URI de conexión en variables de entorno
- Verificar que el token JWT sea válido
- Comprobar que el header Authorization esté presente
- Asegurar que Docker esté ejecutándose
- Verificar que no haya otros procesos usando los puertos
- Validaciones: Implementadas tanto a nivel de dominio como de DTO
- Manejo de Errores: Filtro global con excepciones personalizadas
- Subida de Archivos: Multer para imágenes de productos
- Tests: Testcontainers para MongoDB en tests de integración
- Seguridad: Validación de JWT en rutas protegidas
- Fork del proyecto
- Crear rama feature (
git checkout -b feature/nueva-funcionalidad) - Commit cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crear Pull Request