|
|
@@ -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;
|