Sfoglia il codice sorgente

Add public share route for shared tracks

k4be 7 ore fa
parent
commit
b89afb39a3
1 ha cambiato i file con 35 aggiunte e 0 eliminazioni
  1. 35 0
      gpx-vis-backend/src/routes/share.js

+ 35 - 0
gpx-vis-backend/src/routes/share.js

@@ -0,0 +1,35 @@
+const router = require('express').Router();
+const { ShareLink, Track, TrackPoint } = require('../models');
+
+router.get('/:code', async (req, res) => {
+  try {
+    const link = await ShareLink.findOne({
+      where: { code: req.params.code },
+      include: [{ model: Track }],
+    });
+    if (!link) return res.status(404).json({ error: 'Share link not found' });
+
+    const track = link.Track;
+    const points = await TrackPoint.findAll({
+      where: { trackId: track.id },
+      order: [['segmentId', 'ASC'], ['sequence', 'ASC']],
+      attributes: ['lat', 'lon', 'elevation', 'time', 'segmentId'],
+    });
+
+    const segMap = {};
+    for (const p of points) {
+      if (!segMap[p.segmentId]) segMap[p.segmentId] = [];
+      segMap[p.segmentId].push([p.lat, p.lon, p.elevation, p.time]);
+    }
+    const segments = Object.keys(segMap).sort((a,b)=>a-b).map(k => segMap[k]);
+
+    res.json({
+      meta: { trackId: track.id, name: track.name, totalDistance: track.totalDistance, pointCount: track.pointCount, trackDate: track.trackDate },
+      segments
+    });
+  } catch (e) {
+    res.status(500).json({ error: 'Server error' });
+  }
+});
+
+module.exports = router;