const express = require('express'); const cors = require('cors'); require('dotenv').config({ path: __dirname + '/.env' }); const errorHandler = require('./src/middlewares/errorHandler'); const logger = require('./src/utils/logger'); const app = express(); // Middlewares globales app.use(cors({ origin: [process.env.FRONTEND_URL, process.env.ADMIN_URL], credentials: true })); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // Servir archivos estáticos (imágenes de productos) app.use('/uploads', express.static('public/uploads')); // Logger de requests app.use((req, res, next) => { logger.info(`${req.method} ${req.path}`, { ip: req.ip, userAgent: req.get('user-agent') }); next(); }); // Rutas const authRoutes = require('./src/routes/authRoutes'); const productRoutes = require('./src/routes/productRoutes'); const categoryRoutes = require('./src/routes/categoryRoutes'); const inventoryRoutes = require('./src/routes/inventoryRoutes'); const orderRoutes = require('./src/routes/orderRoutes'); const cartRoutes = require('./src/routes/cartRoutes'); const uploadRoutes = require('./src/routes/uploadRoutes'); app.use('/api/auth', authRoutes); app.use('/api/products', productRoutes); app.use('/api/categories', categoryRoutes); app.use('/api/inventory', inventoryRoutes); app.use('/api/orders', orderRoutes); app.use('/api/cart', cartRoutes); app.use('/api/upload', uploadRoutes); // Health check app.get('/health', (req, res) => { res.json({ status: 'OK', environment: process.env.NODE_ENV, timestamp: new Date().toISOString() }); }); // Ruta raíz app.get('/', (req, res) => { res.json({ name: 'OfertaWeb API', version: '1.0.0', endpoints: { auth: '/api/auth', products: '/api/products', categories: '/api/categories', inventory: '/api/inventory', orders: '/api/orders', cart: '/api/cart', upload: '/api/upload' } }); }); // Manejo de rutas no encontradas app.use((req, res) => { res.status(404).json({ error: 'Ruta no encontrada' }); }); // Middleware de manejo de errores (debe estar al final) app.use(errorHandler); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`🚀 Servidor OfertaWeb corriendo en puerto ${PORT}`); console.log(`📝 Ambiente: ${process.env.NODE_ENV || 'development'}`); logger.info(`Servidor iniciado en puerto ${PORT}`); });