const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const path = require('path'); require('dotenv').config(); const { sequelize } = require('./config/database'); const authRoutes = require('./routes/auth'); const userRoutes = require('./routes/users'); const courseRoutes = require('./routes/courses'); const enrollmentRoutes = require('./routes/enrollments'); const attendanceRoutes = require('./routes/attendance'); const assignmentRoutes = require('./routes/assignments'); const app = express(); const PORT = process.env.PORT || 5000; // Middleware app.use(helmet()); app.use(cors({ origin: process.env.CORS_ORIGIN || 'http://localhost:3000', credentials: true })); app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // Static files app.use('/uploads', express.static(path.join(__dirname, 'uploads'))); // Routes app.use('/api/auth', authRoutes); app.use('/api/users', userRoutes); app.use('/api/courses', courseRoutes); app.use('/api/enrollments', enrollmentRoutes); app.use('/api/attendance', attendanceRoutes); app.use('/api/assignments', assignmentRoutes); // Health check endpoint app.get('/api/health', (req, res) => { res.json({ status: 'OK', message: 'CourseWorx API is running' }); }); // Error handling middleware app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ error: 'Something went wrong!', message: process.env.NODE_ENV === 'development' ? err.message : 'Internal server error' }); }); // 404 handler app.use('*', (req, res) => { res.status(404).json({ error: 'Route not found' }); }); // Database connection and server start const startServer = async () => { try { await sequelize.authenticate(); console.log('✅ Database connection established successfully.'); // Sync database (in development) if (process.env.NODE_ENV === 'development') { await sequelize.sync({ alter: true }); console.log('✅ Database synchronized.'); } app.listen(PORT, () => { console.log(`🚀 Server running on port ${PORT}`); console.log(`📱 API available at http://localhost:${PORT}/api`); }); } catch (error) { console.error('❌ Unable to connect to the database:', error); process.exit(1); } }; startServer();