-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
52 lines (44 loc) · 1.64 KB
/
Copy pathapp.js
File metadata and controls
52 lines (44 loc) · 1.64 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
const express = require('express');
const cors = require('cors');
// Route imports
const adminRoutes = require('./routes/adminRoutes');
const gymRoutes = require('./routes/gymRoutes');
const equipmentRoutes = require('./routes/equipmentRoutes');
const userRoutes = require('./routes/userRoutes');
const leaderboardRoutes = require('./routes/leaderboardRoutes');
const notificationsRoutes = require('./routes/notificationsRoutes');
const bestInClassRoutes = require('./routes/bestInClassRoutes');
const brandRoutes = require('./routes/brandRoutes');
const exercisesRoutes = require('./routes/exercisesRoutes');
const app = express();
// CORS configuration
const corsOptions = {
origin: function(origin, callback) {
const allowed = process.env.CORS_ORIGIN?.split(',') || [];
if (!origin || allowed.includes(origin) || origin.endsWith('.vercel.app')) {
callback(null, true);
} else {
console.error(`CORS rejected origin: ${origin} (allowed: ${allowed.join(', ')})`);
callback(new Error('Not allowed by CORS'));
}
}
};
// Middleware
app.use(cors(corsOptions));
app.use(express.json());
// Health check for Render cold-start polling
app.get('/health', (_req, res) => res.json({ ok: true }));
// Route definitions
app.use('/admin', adminRoutes);
app.use('/leaderboard', leaderboardRoutes);
app.use('/gyms', gymRoutes);
app.use('/equipment', equipmentRoutes);
app.use('/users', userRoutes);
app.use('/notifications', notificationsRoutes);
app.use('/best-in-class', bestInClassRoutes);
app.use('/brands', brandRoutes);
app.use('/exercises', exercisesRoutes);
app.use((req, res) => {
res.status(404).json({ error: 'Route not found' });
});
module.exports = app;