瀏覽代碼

Fix track delete: explicitly destroy TrackPoints and ShareLink first

Relying on DB-level ON DELETE CASCADE is unreliable for SQLite — the
pragma is connection-scoped and historical DBs may lack the constraint.
Delete children explicitly before destroying the track, matching the
pattern already used in the directory delete route.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
k4be 12 小時之前
父節點
當前提交
45b1f3324e
共有 1 個文件被更改,包括 3 次插入0 次删除
  1. 3 0
      gpx-vis-backend/src/routes/tracks.js

+ 3 - 0
gpx-vis-backend/src/routes/tracks.js

@@ -166,6 +166,9 @@ router.delete('/:id', requireAuth, async (req, res) => {
   try {
     const track = await Track.findOne({ where: { id: req.params.id, userId: req.user.id } });
     if (!track) return res.status(404).json({ error: 'Track not found' });
+    // Delete children explicitly — don't rely on DB-level cascade
+    await TrackPoint.destroy({ where: { trackId: track.id } });
+    await ShareLink.destroy({ where: { trackId: track.id } });
     await track.destroy();
     res.json({ ok: true });
   } catch (e) {