import express from 'express'; import cors from 'cors'; import dotenv from 'dotenv'; import compression from 'compression'; import trackRoutes from './routes/trackRoutes'; import adventureRoutes from './routes/adventureRoutes'; import activityRoutes from './routes/activityRoutes'; import { TrackModel } from './models/TrackModel'; import { AdventureModel } from './models/AdventureModel'; import { ActivityModel } from './models/ActivityModel'; dotenv.config(); const app = express(); const port = Number.parseInt(process.env.PORT ?? '3000', 10); const host = process.env.HOST || '0.0.0.0'; app.use(cors()); app.use(compression()); app.use(express.json()); // Initialize database tables async function initializeDatabase() { try { await TrackModel.ensureTable(); await AdventureModel.ensureTable(); await ActivityModel.ensureTable(); console.log('Database tables initialized successfully.'); } catch (error) { console.error('Error initializing database tables:', error); } } initializeDatabase(); // Health check endpoint app.get('/api/health', (req, res) => { res.status(200).send('OK'); }); // Public ski tracks endpoints app.use('/api/tracks', trackRoutes); // UI taxonomy endpoints app.use('/api/activities', activityRoutes); // User adventures endpoints app.use('/api/adventures', adventureRoutes); app.listen(port, host, () => { console.log(`Server running on http://${host}:${port}`); });