Initial commit: Estructura backend y frontend con estándar VPS
- Backend migrado a estructura VPS (src/ subfolder) - Frontend con estructura Vite + React 19 + Tailwind - Configuración PostgreSQL con Pool - API service con interceptores JWT - Ambos servidores funcionando (backend:3001, frontend:5173)
This commit is contained in:
229
backend/README.md
Normal file
229
backend/README.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# 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:**
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
2. **Configurar variables de entorno:**
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Editar .env con tus credenciales
|
||||
```
|
||||
|
||||
3. **Ejecutar migraciones:**
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
4. **Iniciar servidor:**
|
||||
```bash
|
||||
# Desarrollo
|
||||
npm run dev
|
||||
|
||||
# Producción
|
||||
npm start
|
||||
```
|
||||
|
||||
El servidor estará disponible en `http://localhost:3001`
|
||||
|
||||
## 📋 Variables de Entorno
|
||||
|
||||
```env
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
```javascript
|
||||
// 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
|
||||
Reference in New Issue
Block a user