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 };