Files

OfertaWeb Backend

Backend API para tienda web multi-canal con integración a MercadoLibre, Instagram Shopping y BlueExpress.

📁 Estructura del Proyecto

backend/
├── server.js                 # Punto de entrada del servidor
├── package.json              # Dependencias y scripts
├── .env                      # Variables de entorno
├── .gitignore               # Archivos ignorados por git
├── src/                     # Código fuente
│   ├── config/              # Configuraciones (DB, etc)
│   ├── controllers/         # Controladores de rutas
│   ├── middlewares/         # Middlewares (auth, validation, etc)
│   ├── models/              # Modelos de datos
│   ├── routes/              # Definición de rutas
│   ├── services/            # Lógica de negocio
│   └── utils/               # Utilidades (logger, helpers)
├── migrations/              # Migraciones de base de datos
├── scripts/                 # Scripts de utilidad
├── public/                  # Archivos públicos
│   └── uploads/            # Imágenes subidas
├── logs/                    # Logs del servidor
└── tests/                   # Tests unitarios e integración

🚀 Inicio Rápido

Requisitos Previos

  • Node.js >= 18.x
  • PostgreSQL >= 12
  • npm o yarn

Instalación

  1. Instalar dependencias:
npm install
  1. Configurar variables de entorno:
cp .env.example .env
# Editar .env con tus credenciales
  1. Ejecutar migraciones:
psql -U postgres -d ofertaweb -f migrations/001_schema_completo.sql
psql -U postgres -d ofertaweb -f migrations/002_initial_data.sql
psql -U postgres -d ofertaweb -f migrations/003_create_admin_user.sql
psql -U postgres -d ofertaweb -f migrations/004_add_codigo_to_categories.sql
  1. Iniciar servidor:
# Desarrollo
npm run dev

# Producción
npm start

El servidor estará disponible en http://localhost:3001

📋 Variables de Entorno

# Puerto del servidor
PORT=3001

# Entorno
NODE_ENV=development

# Base de datos
DB_HOST=localhost
DB_PORT=5432
DB_NAME=ofertaweb
DB_USER=ofertaweb_user
DB_PASSWORD=tu_password

# JWT
JWT_SECRET=tu_clave_secreta
JWT_EXPIRES_IN=7d

# CORS
FRONTEND_URL=http://localhost:5173
ADMIN_URL=http://localhost:5174

🛣️ API Endpoints

Autenticación

  • POST /api/auth/login - Iniciar sesión
  • POST /api/auth/register - Registrar usuario
  • GET /api/auth/me - Obtener usuario actual

Productos

  • GET /api/products - Listar productos
  • GET /api/products/:id - Obtener producto
  • POST /api/products - Crear producto (admin)
  • PUT /api/products/:id - Actualizar producto (admin)
  • DELETE /api/products/:id - Eliminar producto (admin)

Categorías

  • GET /api/categories - Listar categorías
  • GET /api/categories/tree - Árbol de categorías
  • POST /api/categories - Crear categoría (admin)
  • PUT /api/categories/:id - Actualizar categoría (admin)

Inventario

  • GET /api/inventory/:productId - Ver inventario
  • POST /api/inventory/adjust - Ajustar stock (admin)
  • GET /api/inventory/movements/:productId - Historial de movimientos

Órdenes

  • GET /api/orders - Listar órdenes
  • GET /api/orders/:id - Detalle de orden
  • POST /api/orders - Crear orden
  • PATCH /api/orders/:id/status - Actualizar estado (admin)

Carrito

  • GET /api/cart - Ver carrito
  • POST /api/cart/items - Agregar producto
  • PUT /api/cart/items/:productId - Actualizar cantidad
  • DELETE /api/cart/items/:productId - Eliminar del carrito

Uploads

  • POST /api/upload/product/:productId - Subir imagen de producto
  • DELETE /api/upload/image/:imageId - Eliminar imagen

🗄️ Base de Datos

Módulos

  1. Usuarios y Autenticación - users, user_addresses
  2. Catálogo - categories, products, product_images
  3. Multi-Canal - channels, channel_products
  4. Inventario - inventory, inventory_movements
  5. Carrito - carts, cart_items
  6. Órdenes - orders, order_items, order_status_history
  7. Pagos - payments
  8. Envíos - shipments

🔧 Scripts Disponibles

# Desarrollo con auto-reload
npm run dev

# Iniciar en producción
npm start

# Ejecutar tests
npm test

# Generar hash de contraseña
node scripts/generate_password_hash.js

📝 Logs

Los logs se almacenan en la carpeta logs/:

  • error.log - Solo errores
  • combined.log - Todos los logs

🔐 Seguridad

  • Autenticación mediante JWT
  • Contraseñas hasheadas con bcrypt
  • Validación de datos con Joi
  • Protección CORS configurada
  • Rate limiting implementado
  • SQL injection prevention con prepared statements

🚧 Desarrollo

Agregar nueva ruta

  1. Crear controlador en src/controllers/
  2. Crear modelo en src/models/ (si aplica)
  3. Definir ruta en src/routes/
  4. Registrar en server.js

Ejemplo:

// src/controllers/ejemploController.js
const db = require('../config/db');

exports.getEjemplo = async (req, res) => {
  const result = await db.query('SELECT * FROM tabla');
  res.json(result.rows);
};

// src/routes/ejemploRoutes.js
const router = require('express').Router();
const controller = require('../controllers/ejemploController');

router.get('/', controller.getEjemplo);

module.exports = router;

// server.js
const ejemploRoutes = require('./src/routes/ejemploRoutes');
app.use('/api/ejemplo', ejemploRoutes);

📦 Dependencias Principales

  • express - Framework web
  • pg - Cliente PostgreSQL
  • jsonwebtoken - Autenticación JWT
  • bcryptjs - Hash de contraseñas
  • multer - Upload de archivos
  • winston - Sistema de logs
  • joi - Validación de datos
  • cors - Configuración CORS

🤝 Contribuir

  1. Crear rama feature: git checkout -b feature/nueva-funcionalidad
  2. Hacer cambios y commit: git commit -m 'Agregar nueva funcionalidad'
  3. Push a la rama: git push origin feature/nueva-funcionalidad
  4. Crear Pull Request

📄 Licencia

ISC