feat(spotify): library caching

This commit is contained in:
2025-10-16 11:27:08 -04:00
parent e19c25e94b
commit 1bffafad44
7 changed files with 1570 additions and 69 deletions

View File

@@ -299,6 +299,74 @@ pub fn run() {
kind: MigrationKind::Up,
}];
let spotify_migrations = vec![Migration {
version: 1,
description: "create_spotify_cache_tables",
sql: "
CREATE TABLE IF NOT EXISTS spotify_playlists (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
track_count INTEGER DEFAULT 0,
owner_name TEXT,
image_url TEXT,
cached_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS spotify_albums (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
artist_name TEXT NOT NULL,
track_count INTEGER DEFAULT 0,
release_date TEXT,
image_url TEXT,
cached_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS spotify_artists (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
followers INTEGER DEFAULT 0,
image_url TEXT,
cached_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS spotify_tracks (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
artist_name TEXT NOT NULL,
album_name TEXT,
duration_ms INTEGER DEFAULT 0,
isrc TEXT,
album_image_url TEXT,
cached_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS spotify_playlist_tracks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
playlist_id TEXT NOT NULL,
track_id TEXT NOT NULL,
name TEXT NOT NULL,
artist_name TEXT NOT NULL,
album_name TEXT,
duration_ms INTEGER DEFAULT 0,
track_number INTEGER,
isrc TEXT,
cached_at INTEGER NOT NULL,
UNIQUE(playlist_id, track_id)
);
CREATE INDEX IF NOT EXISTS idx_spotify_playlists_name ON spotify_playlists(name);
CREATE INDEX IF NOT EXISTS idx_spotify_albums_artist ON spotify_albums(artist_name);
CREATE INDEX IF NOT EXISTS idx_spotify_artists_name ON spotify_artists(name);
CREATE INDEX IF NOT EXISTS idx_spotify_tracks_name ON spotify_tracks(name);
CREATE INDEX IF NOT EXISTS idx_spotify_tracks_isrc ON spotify_tracks(isrc);
CREATE INDEX IF NOT EXISTS idx_spotify_playlist_tracks_playlist ON spotify_playlist_tracks(playlist_id);
CREATE INDEX IF NOT EXISTS idx_spotify_playlist_tracks_track ON spotify_playlist_tracks(track_id);
CREATE INDEX IF NOT EXISTS idx_spotify_playlist_tracks_isrc ON spotify_playlist_tracks(isrc);
",
kind: MigrationKind::Up,
}];
tauri::Builder::default()
.plugin(tauri_plugin_oauth::init())
.plugin(tauri_plugin_os::init())
@@ -307,6 +375,7 @@ pub fn run() {
tauri_plugin_sql::Builder::new()
.add_migrations("sqlite:library.db", library_migrations)
.add_migrations("sqlite:deezer.db", deezer_migrations)
.add_migrations("sqlite:spotify.db", spotify_migrations)
.build(),
)
.plugin(tauri_plugin_http::init())