CI / build-and-test (push) Successful in 13m34s
- Strategy Pattern front: ChannelProviderInterface + 6 providers (yt/dm/tw/pt/od/ru) + factory (ids longs/courts) - ChannelContentService: cache par onglet/tri/recherche (TTL 5min), pagination nextPage - ChannelPage: header (banniere/avatar/subs/description ...plus), tabs dynamiques par capabilities, grilles videos/shorts 9:16/playlists/live, recherche debounced, tri recent/populaire, infinite scroll IntersectionObserver, skeletons/empty/error - Backend: GET /api/channels/:provider/:id/content (videos/shorts/playlists/live) natif par provider
29 lines
816 B
SQL
29 lines
816 B
SQL
-- Persistent download queue: jobs survive API restarts, per-user scoping
|
|
BEGIN TRANSACTION;
|
|
|
|
CREATE TABLE IF NOT EXISTS download_jobs (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL,
|
|
provider TEXT NOT NULL,
|
|
video_id TEXT NOT NULL,
|
|
title TEXT,
|
|
state TEXT NOT NULL DEFAULT 'queued', -- queued|running|merging|completed|failed|interrupted
|
|
progress REAL NOT NULL DEFAULT 0,
|
|
format_id TEXT,
|
|
audio_only INTEGER NOT NULL DEFAULT 0,
|
|
url TEXT,
|
|
file_name TEXT,
|
|
file_ext TEXT,
|
|
file_size INTEGER,
|
|
file_path TEXT,
|
|
error TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL,
|
|
completed_at INTEGER
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_download_jobs_user ON download_jobs(user_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_download_jobs_state ON download_jobs(state);
|
|
|
|
COMMIT;
|