require('dotenv').config(); const express = require('express'); const cors = require('cors'); const cookieParser = require('cookie-parser'); const morgan = require('morgan'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const path = require('path'); const connectDB = require('./config/db'); const errorHandler = require('./middleware/errorHandler'); const app = express(); // ─── Security ─── app.use(helmet()); // ─── Rate limiting ─── const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 200, message: { message: 'Too many requests, please try again later.' }, }); app.use('/api/', limiter); // ─── CORS ─── app.use( cors({ origin: process.env.ADMIN_URL || 'http://localhost:3000', credentials: true, }) ); // ─── Body Parsing ─── app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true })); app.use(cookieParser()); // ─── Logging ─── if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')); } // ─── Static uploads ─── app.use('/uploads', express.static(path.join(__dirname, '../uploads'))); // ─── Routes ─── app.use('/api/auth', require('./routes/auth.routes')); app.use('/api/markets', require('./routes/market.routes')); app.use('/api/banners', require('./routes/banner.routes')); app.use('/api/blog', require('./routes/blog.routes')); app.use('/api/colours', require('./routes/colour.routes')); app.use('/api/pages', require('./routes/cms.routes')); app.use('/api/inspiration', require('./routes/inspiration.routes')); app.use('/api/dealers', require('./routes/dealer.routes')); app.use('/api/partners', require('./routes/partner.routes')); app.use('/api/admin-users', require('./routes/admin-user.routes')); app.use('/api/alerts', require('./routes/alert.routes')); // Health check app.get('/api/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); app.get('/', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); // ─── Error Handler ─── app.use(errorHandler); // ─── Start Server ─── const PORT = process.env.PORT || 5000; const startServer = async () => { await connectDB(); app.listen(PORT, () => { console.log(`\n🚀 Harris Paints API running on http://localhost:${PORT}`); console.log(` Environment: ${process.env.NODE_ENV || 'development'}\n`); }); }; startServer(); module.exports = app;