// backend/src/server.ts import express from 'express'; import path from 'path'; import { fileURLToPath } from 'url'; import { initializeDatabase } from './scripts/initializeDatabase.js'; // Route imports import authRoutes from './routes/auth.js'; import employeeRoutes from './routes/employees.js'; import shiftPlanRoutes from './routes/shiftPlans.js'; import setupRoutes from './routes/setup.js'; import scheduledShifts from './routes/scheduledShifts.js'; import schedulingRoutes from './routes/scheduling.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const app = express(); const PORT = 3002; // Middleware app.use(express.json()); // API Routes app.use('/api/setup', setupRoutes); app.use('/api/auth', authRoutes); app.use('/api/employees', employeeRoutes); app.use('/api/shift-plans', shiftPlanRoutes); app.use('/api/scheduled-shifts', scheduledShifts); app.use('/api/scheduling', schedulingRoutes); // Health route app.get('/api/health', (req: any, res: any) => { res.json({ status: 'OK', message: 'Backend lรคuft!', timestamp: new Date().toISOString() }); }); // ๐Ÿ†• STATIC FILE SERVING FรœR FRONTEND app.use(express.static(path.join(__dirname, '../../frontend-build'))); // Error handling middleware app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => { console.error('Unhandled error:', err); res.status(500).json({ error: 'Internal server error' }); }); // Initialize the application const initializeApp = async () => { try { // Initialize database with base schema await initializeDatabase(); // Apply any pending migrations const { applyMigration } = await import('./scripts/applyMigration.js'); await applyMigration(); // Start server only after successful initialization app.listen(PORT, () => { console.log('๐ŸŽ‰ APPLICATION STARTED SUCCESSFULLY!'); console.log(`๐Ÿ“ Port: ${PORT}`); console.log(`๐Ÿ“ Frontend: http://localhost:${PORT}`); console.log(`๐Ÿ“ API: http://localhost:${PORT}/api`); console.log(''); console.log(`๐Ÿ”ง Setup: http://localhost:${PORT}/api/setup/status`); console.log('๐Ÿ“ Create your admin account on first launch'); }); } catch (error) { console.error('โŒ Error during initialization:', error); process.exit(1); } }; // Start the application initializeApp();