|
|
@@ -0,0 +1,47 @@
|
|
|
+const express = require('express');
|
|
|
+const compression = require('compression');
|
|
|
+const cors = require('cors');
|
|
|
+const path = require('path');
|
|
|
+
|
|
|
+let config;
|
|
|
+try {
|
|
|
+ config = require('./config');
|
|
|
+} catch (e) {
|
|
|
+ console.error('Missing config.js - copy config.example.js to config.js and configure it.');
|
|
|
+ process.exit(1);
|
|
|
+}
|
|
|
+
|
|
|
+const { initDatabase } = require('./src/database');
|
|
|
+const authRoutes = require('./src/routes/auth');
|
|
|
+const dirRoutes = require('./src/routes/directories');
|
|
|
+const trackRoutes = require('./src/routes/tracks');
|
|
|
+const shareRoutes = require('./src/routes/share');
|
|
|
+const adminRoutes = require('./src/routes/admin');
|
|
|
+const statsRoutes = require('./src/routes/stats');
|
|
|
+
|
|
|
+const app = express();
|
|
|
+
|
|
|
+app.use(compression());
|
|
|
+app.use(cors({ origin: config.cors.origin, credentials: true }));
|
|
|
+app.use(express.json());
|
|
|
+
|
|
|
+app.use('/api/auth', authRoutes);
|
|
|
+app.use('/api/directories', dirRoutes);
|
|
|
+app.use('/api/tracks', trackRoutes);
|
|
|
+app.use('/api/share', shareRoutes);
|
|
|
+app.use('/api/admin', adminRoutes);
|
|
|
+app.use('/api/stats', statsRoutes);
|
|
|
+
|
|
|
+app.get('/health', (req, res) => res.json({ ok: true }));
|
|
|
+
|
|
|
+async function start() {
|
|
|
+ await initDatabase();
|
|
|
+ app.listen(config.port, () => {
|
|
|
+ console.log(`GPX-vis backend running on port ${config.port}`);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+start().catch(err => {
|
|
|
+ console.error('Startup error:', err);
|
|
|
+ process.exit(1);
|
|
|
+});
|