-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
96 lines (82 loc) · 3.25 KB
/
Copy pathserver.js
File metadata and controls
96 lines (82 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import express from 'express';
import dotenv from 'dotenv';
import cors from 'cors';
import helmet from 'helmet';
import mongoSanitize from 'express-mongo-sanitize';
import xss from 'xss-clean';
import compression from 'compression';
import passport from './src/config/passport.js';
import connectDB from './src/config/db.js';
import authRoutes from './src/routes/authRoutes.js';
import bookRoutes from './src/routes/bookRoutes.js';
import orderRoutes from './src/routes/orderRoutes.js';
import userRoutes from './src/routes/userRoutes.js';
import paymentRoutes from './src/routes/paymentRoutes.js';
import uploadRoutes from './src/routes/uploadRoutes.js';
import subscriptionRoutes from './src/routes/subscriptionRoutes.js';
import planRoutes from './src/routes/planRoutes.js';
import onboardingRoutes from './src/routes/onboardingRoutes.js';
import storeRoutes from './src/routes/storeRoutes.js';
import superAdminRoutes from './src/routes/superAdminRoutes.js';
import webhookRoutes from './src/routes/webhookRoutes.js';
import apiRoutes from './src/routes/apiRoutes.js';
import reviewRoutes from './src/routes/reviewRoutes.js';
import wishlistRoutes from './src/routes/wishlistRoutes.js';
import newsletterRoutes from './src/routes/newsletterRoutes.js';
import { errorHandler } from './src/middleware/errorMiddleware.js';
import { apiLimiter } from './src/middleware/rateLimitMiddleware.js';
import { seedDatabase } from './src/utils/seedData.js';
import Plan from './src/models/Plan.js';
dotenv.config();
const app = express();
const PORT = process.env.PORT || 5000;
// Connect to MongoDB
connectDB().then(async () => {
// Seed database with sample data
await seedDatabase();
// Seed subscription plans
await Plan.seedPlans();
console.log('Subscription plans seeded');
});
// Webhook route (must be before express.json middleware)
app.use('/api/payment/webhook', express.raw({ type: 'application/json' }), paymentRoutes);
// Security Middleware
app.use(helmet()); // Set security HTTP headers
app.use(mongoSanitize()); // Sanitize data against NoSQL injection
app.use(xss()); // Prevent XSS attacks
// Performance Middleware
app.use(compression()); // Compress all responses
// Middleware
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Initialize Passport
app.use(passport.initialize());
// Apply rate limiting to all API routes
app.use('/api/', apiLimiter);
// Routes
app.use('/api/auth', authRoutes);
app.use('/api/books', bookRoutes);
app.use('/api/orders', orderRoutes);
app.use('/api/users', userRoutes);
app.use('/api/payment', paymentRoutes);
app.use('/api/upload', uploadRoutes);
app.use('/api/subscriptions', subscriptionRoutes);
app.use('/api/plans', planRoutes);
app.use('/api/onboarding', onboardingRoutes);
app.use('/api/store', storeRoutes);
app.use('/api/super-admin', superAdminRoutes);
app.use('/api/webhooks', webhookRoutes);
app.use('/api/reviews', reviewRoutes);
app.use('/api/wishlist', wishlistRoutes);
app.use('/api/newsletter', newsletterRoutes);
app.use('/api', apiRoutes);
// Health check
app.get('/api/health', (req, res) => {
res.json({ status: 'OK', message: 'Server is running' });
});
// Error handling middleware
app.use(errorHandler);
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});