From dc11487a9f71da711c6f000f4ccf2325480f5149 Mon Sep 17 00:00:00 2001 From: Geert Rademakes Date: Fri, 8 Aug 2025 13:39:39 +0200 Subject: [PATCH] fix(dnd): bubble drop handler through nested folders; add debug log on handler invoke; harden /playlists/batch insertMany --- packages/backend/src/routes/playlists.ts | 6 ++++-- packages/frontend/src/App.tsx | 2 ++ packages/frontend/src/components/PlaylistManager.tsx | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/routes/playlists.ts b/packages/backend/src/routes/playlists.ts index 8b24f85..97f127d 100644 --- a/packages/backend/src/routes/playlists.ts +++ b/packages/backend/src/routes/playlists.ts @@ -69,8 +69,10 @@ router.get('/structure', async (req: Request, res: Response) => { // Save playlists in batch (replacing all existing ones) router.post('/batch', async (req, res) => { try { - await Playlist.deleteMany({}); // Clear existing playlists - const playlists = await Playlist.create(req.body); + // Replace all playlists atomically + await Playlist.deleteMany({}); + const payload = Array.isArray(req.body) ? req.body : []; + const playlists = await Playlist.insertMany(payload, { ordered: false }); res.json(playlists); } catch (error) { console.error('Error saving playlists:', error); diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 3b54475..fec6507 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -250,7 +250,9 @@ const RekordboxReader: React.FC = () => { }; const updatedFullTree = applyAdd(fullTree); + console.debug('[DnD] saving playlists with added tracks', { playlistName, addCount: songIds.length }); await api.savePlaylists(updatedFullTree); + console.debug('[DnD] playlists saved'); // Reload structure for UI counters const structure = await api.getPlaylistStructure(); diff --git a/packages/frontend/src/components/PlaylistManager.tsx b/packages/frontend/src/components/PlaylistManager.tsx index cd7d0f6..a095696 100644 --- a/packages/frontend/src/components/PlaylistManager.tsx +++ b/packages/frontend/src/components/PlaylistManager.tsx @@ -208,6 +208,7 @@ const PlaylistItem: React.FC = React.memo(({ onPlaylistDelete={onPlaylistDelete} onPlaylistMove={onPlaylistMove} allFolders={allFolders} + onDropSongs={onDropSongs} /> ))} @@ -255,6 +256,7 @@ const PlaylistItem: React.FC = React.memo(({ parsed = (window as any).__rbDragPayload; } if (parsed?.type === 'songs' && Array.isArray(parsed.songIds) && onDropSongs) { + console.debug('[DnD] invoking onDropSongs', node.name, parsed.songIds.length); onDropSongs(node.name, parsed.songIds); } console.debug('[DnD] drop playlist', node.name, parsed, 'raw len', json?.length || 0);