// backend/src/server.ts import express from 'express'; import cors from 'cors'; import { setupDefaultTemplate } from './scripts/setupDefaultTemplate.js'; 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 shiftTemplateRoutes from './routes/shiftTemplates.js'; import setupRoutes from './routes/setup.js'; const app = express(); const PORT = 3002; // CORS und Middleware app.use(cors()); 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/shift-templates', shiftTemplateRoutes); // Health route app.get('/api/health', (req: any, res: any) => { res.json({ status: 'OK', message: 'Backend lรคuft!', timestamp: new Date().toISOString() }); }); // Setup status route (additional endpoint for clarity) app.get('/api/initial-setup', async (req: any, res: any) => { try { const { db } = await import('./services/databaseService.js'); const adminExists = await db.get<{ 'COUNT(*)': number }>( 'SELECT COUNT(*) FROM users WHERE role = ?', ['admin'] ); res.json({ needsInitialSetup: !adminExists || adminExists['COUNT(*)'] === 0 }); } catch (error) { console.error('Error checking initial setup:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Initialize the application const initializeApp = async () => { try { // Initialize database with base schema await initializeDatabase(); //console.log('โœ… Database initialized successfully'); // Apply any pending migrations const { applyMigration } = await import('./scripts/applyMigration.js'); await applyMigration(); //console.log('โœ… Database migrations applied'); // Setup default template await setupDefaultTemplate(); //console.log('โœ… Default template checked/created'); // Start server only after successful initialization app.listen(PORT, () => { console.log('๐ŸŽ‰ BACKEND STARTED SUCCESSFULLY!'); console.log(`๐Ÿ“ Port: ${PORT}`); console.log(`๐Ÿ“ Health: http://localhost:${PORT}/api/health`); console.log(''); console.log(`๐Ÿ”ง Setup ready at: 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); // Exit if initialization fails } }; // Start the application initializeApp();