API REST para sistema integral de gestión de tiendas, recursos humanos, inventario y ventas, construida con Node.js, Express, TypeScript y Prisma ORM con SQLite.
- Características
- Tecnologías
- Arquitectura del Proyecto
- Requisitos Previos
- Instalación
- Configuración
- Scripts Disponibles
- Base de Datos
- Docker
- Estructura de la Base de Datos
- Funcionalidades
- API Endpoints
- Desarrollo
- Licencia
- 🔐 Autenticación y Autorización con JWT
- 👥 Gestión de Recursos Humanos (empleados, nóminas, asistencias, permisos)
- 📦 Control de Inventario (productos, almacenes, transferencias, logs de stock)
- 💰 Sistema de Ventas (ventas, pagos, devoluciones, descuentos)
- 🔄 Gestión de Turnos con sistema de intercambio entre empleados
- 📊 Reportes y Métricas de desempeño
- 🐳 Dockerizado para fácil deployment
- 🔒 Encriptación de contraseñas automática con bcrypt
- 🎯 Validación de datos con express-validator
- Node.js 22 - Runtime de JavaScript
- TypeScript 5.9 - Tipado estático
- Express 5.2 - Framework web
- Prisma 7.3 - ORM y query builder
- SQLite con better-sqlite3
- Prisma Client con soporte para adaptador SQLite
- bcrypt - Hash de contraseñas
- jsonwebtoken - Tokens JWT para autenticación
- cors - Control de acceso cross-origin
- nodemon - Hot reload en desarrollo
- ts-node - Ejecución de TypeScript
- tsx - Ejecución rápida de TypeScript
- pnpm - Gestor de paquetes eficiente
store-system-backend/
├── prisma/
│ ├── schema/ # Esquemas Prisma modulares
│ │ ├── auth.prisma # Autenticación y usuarios
│ │ ├── base.prisma # Configuración base
│ │ ├── hr.prisma # Recursos humanos
│ │ ├── inventory.prisma # Inventario
│ │ └── sales.prisma # Ventas
│ ├── migrations/ # Historial de migraciones
│ ├── seed.ts # Datos iniciales
│ └── src/
│ └── index.ts # Cliente Prisma extendido
├── src/
│ ├── config/ # Configuraciones
│ │ ├── db.config.ts
│ │ ├── envs.config.ts
│ │ └── prisma.ts
│ ├── controller/ # Controladores
│ ├── service/ # Lógica de negocio
│ ├── router/ # Rutas
│ ├── middlewares/ # Middlewares personalizados
│ ├── helpers/ # Utilidades
│ ├── model/ # Modelos de servidor
│ └── app.ts # Punto de entrada
├── docker-compose.yml # Orquestación Docker
├── Dockerfile # Imagen Docker
├── prisma.config.ts # Configuración Prisma
└── package.json
- Node.js >= 22.x
- pnpm >= 10.28.2 (instalado automáticamente con corepack)
- Docker y Docker Compose (opcional, para deployment)
git clone <repository-url>
cd store-system-backendpnpm installCrea un archivo .env en la raíz del proyecto:
# Server
PORT=8080
NODE_ENV=development
# Database
DATABASE_URL="file:./dev.db"
# JWT
JWT_SECRET_KEY=your-super-secret-key-change-this
# Database (opcional para otros motores)
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USER=
DB_PASSWORD=# Generar el cliente Prisma
pnpm db:generate
# Ejecutar migraciones
pnpm db:migrate
# Sembrar datos iniciales (admin por defecto)
pnpm db:seed# Desarrollo (con hot reload)
pnpm dev
# Producción
pnpm build
pnpm startEl servidor estará disponible en http://localhost:8080
El proyecto utiliza un cliente Prisma extendido que automáticamente:
- ✅ Hashea contraseñas en operaciones
create,updateyupsert - ✅ Usa bcrypt con salt rounds de 10
- ✅ Mantiene el patrón singleton en desarrollo
Ubicación: prisma/src/index.ts
# Desarrollo
pnpm dev # Inicia servidor con nodemon (hot reload)
# Compilación
pnpm build # Compila TypeScript a JavaScript
pnpm start # Ejecuta servidor compilado
# Base de datos
pnpm db:generate # Genera Prisma Client
pnpm db:migrate # Ejecuta migraciones
pnpm db:studio # Abre Prisma Studio (GUI)
pnpm db:seed # Siembra datos iniciales
# Utilidades
pnpm clean # Limpia carpeta dist/El proyecto utiliza múltiples archivos de schema Prisma para mejor organización:
User- Usuarios del sistema con roles y verificación
Employee- Información de empleadosSchedule- Horarios de trabajoTimeOff- Días libres y vacacionesAttendanceLog- Registro de asistenciasPayroll- NóminasSalaryLog- Historial de salariosPerformanceWarning- Advertencias de desempeñoShiftSwap- Intercambios de turnos
Warehouse- AlmacenesProduct- ProductosStockLog- Movimientos de inventarioTransfer- Transferencias entre almacenesTransferItem- Ítems de transferencia
Sale- Ventas realizadasSaleItem- Productos vendidosPayment- PagosRefund- DevolucionesDiscount- Descuentos aplicados
# Crear nueva migración
pnpm db:migrate
# Ver estado de migraciones
pnpm exec prisma migrate status
# Resetear base de datos (CUIDADO: solo en desarrollo)
pnpm exec prisma migrate resetEl seed crea un usuario administrador por defecto:
- Email:
mail@sofi.dev - Password:
sofievO - Role: Admin
- Status: Activo y Verificado
# Construir imagen
docker compose build
# Iniciar contenedor
docker compose up -d
# Ver logs
docker compose logs -f app
# Detener
docker compose down- ✅ Multi-stage build para optimizar tamaño
- ✅ Instalación de dependencias con frozen lockfile
- ✅ Generación automática de Prisma Client
- ✅ Volumen persistente para base de datos SQLite
- ✅ Migraciones automáticas al iniciar
- ✅ Política de restart para alta disponibilidad
Los datos se persisten en ./data/prod.db en el host.
- ✅ Registro y gestión de usuarios
- ✅ Registro y gestión de empleados
- ✅ Modificación de permisos
- ✅ Actualización de datos personales
- ✅ Registro de días libres
- ✅ Gestión de nóminas
- ✅ Control de inventario
- ✅ Aprobación de intercambios de turnos
- ✅ Acceso a perfil personal
- ✅ Consulta de días libres disponibles
- ✅ Consulta de horas extra
- ✅ Visualización de horarios
- ✅ Descarga de recibos de nómina
- ✅ Solicitud de intercambio de turnos
- ✅ Registro de ventas
POST /api/auth/register # Registro de usuario
POST /api/auth/login # Inicio de sesión
POST /api/auth/verify # Verificar email
POST /api/auth/refresh # Renovar token
GET /api/users # Listar usuarios (Admin)
GET /api/users/:id # Obtener usuario
PUT /api/users/:id # Actualizar usuario
DELETE /api/users/:id # Eliminar usuario (Admin)
GET /api/employees # Listar empleados
POST /api/employees # Crear empleado (Admin)
GET /api/employees/:id # Obtener empleado
PUT /api/employees/:id # Actualizar empleado
Más endpoints en desarrollo...
- Arquitectura: MVC (Model-View-Controller)
- Estilo: camelCase para variables y funciones
- Imports: Absolutos desde
src/ - Tipos: TypeScript strict mode
- Crear schema en
prisma/schema/ - Ejecutar migración:
pnpm db:migrate - Crear controlador en
src/controller/ - Crear servicio en
src/service/ - Crear router en
src/router/ - Registrar router en
src/model/server.ts
El proyecto usa ts-node con nodemon para hot reload:
// nodemon.json
{
"watch": ["src", "prisma"],
"ext": "ts,prisma",
"exec": "ts-node src/app.ts"
}⚠️ El script de seed está bloqueado en producción⚠️ CambiaJWT_SECRET_KEYen producción⚠️ SQLite es ideal para desarrollo; considera PostgreSQL/MySQL para producción⚠️ Los logs de queries solo aparecen en desarrollo
MIT License - Ver archivo LICENSE para más detalles
Desarrollado con ❤️ por el equipo de Store System