feat(dz): add playlist caching and playlist view UI

Introduce database schema and types for caching online playlist tracks. Add functions to upsert and retrieve playlist tracks
from the cache. Implement a new Svelte page for viewing individual
playlists, including favorite tracks, with UI for track listing and
playlist info. Update the main service page to support
double-click navigation to playlist details.
This commit is contained in:
2025-10-02 14:12:35 -04:00
parent d774aba0d4
commit 40e72126aa
4 changed files with 517 additions and 0 deletions

View File

@@ -100,10 +100,25 @@ pub fn run() {
cached_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS deezer_playlist_tracks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
playlist_id TEXT NOT NULL,
track_id TEXT NOT NULL,
title TEXT NOT NULL,
artist_name TEXT NOT NULL,
album_title TEXT,
duration INTEGER DEFAULT 0,
track_number INTEGER,
cached_at INTEGER NOT NULL,
UNIQUE(playlist_id, track_id)
);
CREATE INDEX IF NOT EXISTS idx_deezer_playlists_title ON deezer_playlists(title);
CREATE INDEX IF NOT EXISTS idx_deezer_albums_artist ON deezer_albums(artist_name);
CREATE INDEX IF NOT EXISTS idx_deezer_artists_name ON deezer_artists(name);
CREATE INDEX IF NOT EXISTS idx_deezer_tracks_title ON deezer_tracks(title);
CREATE INDEX IF NOT EXISTS idx_deezer_playlist_tracks_playlist ON deezer_playlist_tracks(playlist_id);
CREATE INDEX IF NOT EXISTS idx_deezer_playlist_tracks_track ON deezer_playlist_tracks(track_id);
",
kind: MigrationKind::Up,
}];