const path = require('path'); const express = require('express'); const dotenv = require('dotenv'); const cors = require('cors'); const morgan = require('morgan'); const fs = require('fs'); const { connectDB, sequelize } = require('./config/db'); // Load env variables dotenv.config(); // Import route files const userRoutes = require('./routes/userRoutes'); const gymClassRoutes = require('./routes/gymClassRoutes'); const bookingRoutes = require('./routes/bookingRoutes'); const uploadRoutes = require('./routes/uploadRoutes'); // Initialize express app const app = express(); // Middleware app.use(express.json()); app.use(cors()); // Dev logging middleware if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')); } // Create uploads directory if it doesn't exist const uploadsDir = path.join(__dirname, 'uploads'); if (!fs.existsSync(uploadsDir)) { fs.mkdirSync(uploadsDir, { recursive: true }); } // Set static folder for uploads app.use('/uploads', express.static(path.join(__dirname, 'uploads'))); // Mount routers app.use('/api/users', userRoutes); app.use('/api/classes', gymClassRoutes); app.use('/api/bookings', bookingRoutes); app.use('/api/upload', uploadRoutes); // Root route app.get('/', (req, res) => { res.json({ message: 'Welcome to Gym API' }); }); // Error handling middleware app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ message: 'Server Error', error: err.message }); }); // Define port const PORT = process.env.PORT || 3000; // Connect to database and start server const startServer = async () => { try { // Connect to database await connectDB(); await sequelize.sync(); console.log('Database synchronized'); // Start server app.listen(PORT, () => { console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`); }); } catch (error) { console.error('Unable to start server:', error); process.exit(1); } }; startServer(); // Handle unhandled promise rejections process.on('unhandledRejection', (err) => { console.log(`Error: ${err.message}`); // Close server & exit process process.exit(1); });