59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
require('dotenv').config();
|
|
const express = require('express');
|
|
const http = require('http');
|
|
const cors = require('cors');
|
|
const { bootstrapGames } = require('./bootstrap');
|
|
const { WebSocketManager, setWebSocketManager } = require('./utils/websocket-manager');
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 5000;
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Health check
|
|
app.get('/health', (req, res) => {
|
|
res.json({ status: 'ok', message: 'Jackbox Game Picker API is running' });
|
|
});
|
|
|
|
// Routes
|
|
const authRoutes = require('./routes/auth');
|
|
const gamesRoutes = require('./routes/games');
|
|
const sessionsRoutes = require('./routes/sessions');
|
|
const statsRoutes = require('./routes/stats');
|
|
const pickerRoutes = require('./routes/picker');
|
|
const votesRoutes = require('./routes/votes');
|
|
const webhooksRoutes = require('./routes/webhooks');
|
|
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/games', gamesRoutes);
|
|
app.use('/api/sessions', sessionsRoutes);
|
|
app.use('/api/stats', statsRoutes);
|
|
app.use('/api', pickerRoutes);
|
|
app.use('/api/votes', votesRoutes);
|
|
app.use('/api/webhooks', webhooksRoutes);
|
|
|
|
// Error handling middleware
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).json({ error: 'Something went wrong!', message: err.message });
|
|
});
|
|
|
|
// Create HTTP server and attach WebSocket
|
|
const server = http.createServer(app);
|
|
|
|
// Initialize WebSocket Manager
|
|
const wsManager = new WebSocketManager(server);
|
|
setWebSocketManager(wsManager);
|
|
|
|
if (require.main === module) {
|
|
bootstrapGames();
|
|
server.listen(PORT, '0.0.0.0', () => {
|
|
console.log(`Server is running on port ${PORT}`);
|
|
console.log(`WebSocket server available at ws://localhost:${PORT}/api/sessions/live`);
|
|
});
|
|
}
|
|
|
|
module.exports = { app, server };
|