Sistema de gestión de almacén completo con funcionalidades de inventario, ventas, sincronización offline y exportación de datos.
Backend API RESTful desarrollado en Node.js y Express para gestionar un sistema completo de almacén. Incluye autenticación JWT, gestión de productos, control de ventas, sincronización de datos y notificaciones por email.
- Autenticación JWT (JSON Web Tokens)
- Registro e inicio de sesión de almacenes
- Autenticación con Google OAuth
- Middleware de protección de rutas
- Encriptación de contraseñas con bcryptjs
- CRUD completo de productos
- Control de stock y stock mínimo
- Gestión de categorías
- Códigos de barras únicos
- Fechas de vencimiento
- Alertas de productos por vencer
- Alertas de stock bajo
- Importación masiva de productos
- Búsqueda y filtrado avanzado
- Registro de ventas con múltiples productos
- Control de métodos de pago (efectivo, transferencia, tarjeta)
- Generación automática de números de ticket
- Envío de comprobantes por email
- Cancelación de ventas con restauración de stock
- Estadísticas y reportes de ventas
- Filtros por fecha, método de pago y estado
- Estadísticas de ventas diarias, semanales y mensuales
- Resumen de productos más vendidos
- Análisis por método de pago
- Reportes de productos por vencer
- Alertas de stock bajo
- API para sincronización de datos offline
- Endpoints para datos pendientes
- Sincronización bidireccional
- Timestamps de última sincronización
- Envío de comprobantes por email
- Notificaciones de stock bajo
- Alertas de productos por vencer
- Integración con servicios de email (BREVO)
- Node.js - Entorno de ejecución
- Express.js - Framework web
- MongoDB - Base de datos NoSQL
- Mongoose - ODM para MongoDB
- JWT - Autenticación y autorización
- bcryptjs - Encriptación de contraseñas
- express-validator - Validación de datos
- dotenv - Variables de entorno
almacen-back/
├── src/
│ ├── config/
│ │ └── database.js # Configuración de MongoDB
│ ├── controllers/
│ │ ├── auth.controller.js # Controlador de autenticación
│ │ ├── product.controller.js # Controlador de productos
│ │ └── sale.controller.js # Controlador de ventas
│ ├── middlewares/
│ │ └── auth.middleware.js # Middleware de autenticación
│ ├── models/
│ │ ├── Product.model.js # Modelo de Producto
│ │ ├── Sale.model.js # Modelo de Venta
│ │ └── Store.model.js # Modelo de Almacén
│ ├── routes/
│ │ ├── auth.routes.js # Rutas de autenticación
│ │ ├── product.routes.js # Rutas de productos
│ │ └── sale.routes.js # Rutas de ventas
│ ├── services/
│ │ └── emailService.js # Servicio de email
│ ├── utils/
│ │ └── generateToken.js # Utilidades JWT
│ └── server.js # Punto de entrada
├── .env # Variables de entorno
├── package.json
└── README.md
POST /api/auth/register- Registro de nuevo almacénPOST /api/auth/login- Inicio de sesiónPOST /api/auth/google- Autenticación con GoogleGET /api/auth/me- Obtener información del almacén autenticadoPUT /api/auth/profile- Actualizar perfil del almacén
GET /api/products- Obtener todos los productosGET /api/products/:id- Obtener producto por IDGET /api/products/barcode/:barcode- Obtener producto por código de barrasGET /api/products/low-stock- Productos con stock bajoGET /api/products/near-expiration- Productos por vencerGET /api/products/expired- Productos vencidosPOST /api/products- Crear nuevo productoPUT /api/products/:id- Actualizar productoDELETE /api/products/:id- Eliminar productoPATCH /api/products/:id/stock- Actualizar stockPOST /api/products/import- Importar productos masivamente
GET /api/sales- Obtener todas las ventasGET /api/sales/:id- Obtener venta por IDGET /api/sales/today- Ventas del díaGET /api/sales/stats/summary- Estadísticas de ventasPOST /api/sales- Crear nueva ventaDELETE /api/sales/:id- Cancelar ventaPOST /api/sales/:id/send-email- Enviar comprobante por email
Nota: Todas las rutas (excepto autenticación) requieren token JWT válido.
- Autenticación JWT en todas las rutas protegidas
- Encriptación de contraseñas con bcryptjs
- Validación de datos de entrada con express-validator
- Protección contra inyección SQL/NoSQL
- CORS configurado para dominios específicos
{
storeName: String,
ownerName: String,
email: String (único),
password: String (encriptado),
phone: String,
address: String
}{
storeId: ObjectId,
barcode: String (único),
name: String,
price: Number,
stock: Number,
minStock: Number,
category: String,
expirationDate: Date,
image: String
}{
storeId: ObjectId,
ticketNumber: String (único),
products: [{
productId: ObjectId,
name: String,
quantity: Number,
price: Number,
subtotal: Number
}],
total: Number,
paymentMethod: String,
customer: {
email: String,
phone: String
},
status: String
}Registro de Almacén:
POST /api/auth/register
Content-Type: application/json
{
"storeName": "Mi Almacén",
"ownerName": "Juan Pérez",
"email": "juan@example.com",
"password": "password123",
"phone": "+1234567890",
"address": "Calle Principal 123"
}Crear Producto:
POST /api/products
Authorization: Bearer <token>
Content-Type: application/json
{
"barcode": "1234567890123",
"name": "Producto Ejemplo",
"price": 100.50,
"stock": 50,
"minStock": 10,
"category": "Almacén",
"expirationDate": "2024-12-31"
}Para ejecutar tests (cuando estén implementados):
npm testISC
Desarrollado por Ulises Ros
Las contribuciones son bienvenidas. Por favor:
- 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