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:
2025-12-09 00:35:46 -03:00
commit 2a88b4a71b
106 changed files with 22508 additions and 0 deletions

229
backend/README.md Normal file
View 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