78 lines
2.7 KiB
JavaScript
78 lines
2.7 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const helmet = require('helmet');
|
|
const rateLimit = require('express-rate-limit');
|
|
const path = require('path');
|
|
const errorHandler = require('./middleware/errorHandler');
|
|
|
|
// Route Imports
|
|
const authRoutes = require('./routes/authRoutes');
|
|
const productRoutes = require('./routes/productRoutes');
|
|
const categoryRoutes = require('./routes/categoryRoutes');
|
|
const brandRoutes = require('./routes/brandRoutes');
|
|
const cartRoutes = require('./routes/cartRoutes');
|
|
const wishlistRoutes = require('./routes/wishlistRoutes');
|
|
const orderRoutes = require('./routes/orderRoutes');
|
|
const inventoryRoutes = require('./routes/inventoryRoutes');
|
|
const reviewRoutes = require('./routes/reviewRoutes');
|
|
const couponRoutes = require('./routes/couponRoutes');
|
|
const bannerRoutes = require('./routes/bannerRoutes');
|
|
const settingsRoutes = require('./routes/settingsRoutes');
|
|
const socialMediaRoutes = require('./routes/socialMediaRoutes');
|
|
const emailTemplateRoutes = require('./routes/emailTemplateRoutes');
|
|
const contactRoutes = require('./routes/contactRoutes');
|
|
const uploadRoutes = require('./routes/uploadRoutes');
|
|
|
|
const app = express();
|
|
|
|
// Security Middlewares
|
|
app.use(helmet({ crossOriginResourcePolicy: { policy: "cross-origin" } }));
|
|
app.use(cors({
|
|
origin: process.env.CLIENT_URL || '*',
|
|
credentials: true
|
|
}));
|
|
|
|
// Rate Limiter
|
|
const limiter = rateLimit({
|
|
windowMs: 15 * 60 * 1000,
|
|
max: 300,
|
|
message: { success: false, message: 'Too many requests from this IP, please try again later.' }
|
|
});
|
|
app.use('/api', limiter);
|
|
|
|
// Body Parsing
|
|
app.use(express.json({ limit: '10mb' }));
|
|
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
|
|
|
|
// Static Uploads Folder
|
|
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
|
|
|
|
// Root test route
|
|
app.get('/api/health', (req, res) => {
|
|
res.json({ success: true, message: 'Antigravity Guitars API is healthy', timestamp: new Date() });
|
|
});
|
|
|
|
// API Routes
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/products', productRoutes);
|
|
app.use('/api/categories', categoryRoutes);
|
|
app.use('/api/brands', brandRoutes);
|
|
app.use('/api/cart', cartRoutes);
|
|
app.use('/api/wishlist', wishlistRoutes);
|
|
app.use('/api/orders', orderRoutes);
|
|
app.use('/api/inventory', inventoryRoutes);
|
|
app.use('/api/reviews', reviewRoutes);
|
|
app.use('/api/coupons', couponRoutes);
|
|
app.use('/api/banners', bannerRoutes);
|
|
app.use('/api/settings', settingsRoutes);
|
|
app.use('/api/social-media', socialMediaRoutes);
|
|
app.use('/api/email-templates', emailTemplateRoutes);
|
|
app.use('/api/contact', contactRoutes);
|
|
app.use('/api/upload', uploadRoutes);
|
|
|
|
// Centralized Error Handling Middleware
|
|
app.use(errorHandler);
|
|
|
|
module.exports = app;
|
|
|