85 lines
No EOL
2.5 KiB
JavaScript
85 lines
No EOL
2.5 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const helmet = require('helmet');
|
|
const path = require('path');
|
|
require('dotenv').config();
|
|
|
|
const { sequelize } = require('./config/database');
|
|
// Import models to ensure they are registered with Sequelize
|
|
require('./models');
|
|
const authRoutes = require('./routes/auth');
|
|
const userRoutes = require('./routes/users');
|
|
const courseRoutes = require('./routes/courses');
|
|
const courseContentRoutes = require('./routes/courseContent');
|
|
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.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/course-content', courseContentRoutes);
|
|
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();
|