API REST desarrollada con NestJS para la gestión de precios de productos con conversión automática de divisas (USD a VES). El sistema permite controlar el inventario de productos, organizarlos por categorías, configurar márgenes de ganancia tanto globales como individuales, y mantener un historial completo de los cambios de precios. Incluye actualización automática de tasas de cambio y exportación de datos a Excel.
- NestJS: Framework principal para la API
- PostgreSQL: Base de datos relacional
- Prisma: ORM para manejo de base de datos
- JWT + Passport: Sistema de autenticación
- class-validator: Validación de datos
- XLSX: Exportación a Excel
- Docker: Containerización
- Node.js v18 o superior
- PostgreSQL (local o remoto)
- pnpm (gestor de paquetes recomendado)
- Clonar el repositorio e instalar dependencias:
pnpm install- Configurar variables de entorno creando un archivo
.enven la raíz:
DATABASE_URL="tu-url-de-base-de-datos"
JWT_SECRET="tu-clave-secreta-segura"
PORT=3000- Ejecutar migraciones de Prisma para crear las tablas:
pnpm prisma migrate dev- (Opcional) Poblar la base de datos con datos iniciales:
pnpm run prisma:seedInicia el servidor con hot-reload:
pnpm run start:devLa API estará disponible en http://localhost:3000
Compilar y ejecutar:
pnpm run build
pnpm run start:prodLevantar contenedores de la aplicación y base de datos:
docker-compose up -dsrc/
├── auth/ # Autenticación y autorización con JWT
├── categories/ # CRUD de categorías de productos
├── global-profit/ # Gestión del margen de ganancia global
├── history-prices/ # Registro histórico de cambios de precios
├── products/ # CRUD de productos y cálculo de precios
├── rates/ # Tasas de cambio USD/VES
├── users/ # Gestión de usuarios del sistema
└── prisma/ # Configuración y cliente de Prisma
Cada módulo contiene su controlador, servicio y módulo siguiendo la arquitectura de NestJS.
POST /auth/login- Iniciar sesión y obtener token JWTPOST /auth/register- Registrar nuevo usuario
GET /products- Listar todos los productosGET /products/:id- Obtener un producto específicoPOST /products- Crear nuevo productoPATCH /products/:id- Actualizar producto existenteDELETE /products/:id- Eliminar producto (soft delete)POST /products/import-excel- Importar productos desde Excel
GET /categories- Listar todas las categoríasPOST /categories- Crear nueva categoríaPATCH /categories/:id- Actualizar categoríaDELETE /categories/:id- Eliminar categoría
POST /rates- Obtener tasa de cambio actual y crear registroGET /rates/actual- Obtener tasa de cambio actualSSE /rates/cron-update- Endpoint SSE para notificaciones de actualización automática
GET /global-margin- Obtener margen global actualPOST /global-margin- Actualizar margen global
pnpm run start:dev # Inicia servidor en modo desarrollo con hot-reload
pnpm run build # Compila el proyecto TypeScript a JavaScript
pnpm run start:prod # Ejecuta la versión compilada en producción
pnpm run lint # Ejecuta ESLint para verificar código
pnpm run format # Formatea código con Prettier
pnpm run test # Ejecuta tests unitarios con Jest
pnpm run prisma:seed # Pobla la base de datos con datos de prueba- Conversión automática de precios USD a VES basada en tasa de cambio actual
- Cálculo automático de precio final aplicando margen de ganancia
- Sistema de autenticación con JWT y cookies
- Validación de datos con decoradores de class-validator
- Soft deletes para mantener integridad de datos
- Importación de inventario mediante archivo Excel