feat(subscriptions): gestion des abonnements par groupes façon PocketTube
CI / build-and-test (push) Failing after 8m18s
CI / build-and-test (push) Failing after 8m18s
- Tables subscription_groups + subscription_group_members (migration + schema) - API CRUD groupes, membres par groupe, groupes par abonnement - Page Abonnements: onglets Groupes/Chaines, modale creation/edition (icone/couleur), assignation unitaire + lot, filtre par groupe + recherche - Sidebar: section Groupes avec navigation directe (queryParams) - i18n nav.groups FR/EN + 4 tests unitaires service
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
-- Groupes d'abonnements (façon PocketTube) : dossiers thématiques par utilisateur.
|
||||
CREATE TABLE IF NOT EXISTS subscription_groups (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
color TEXT NOT NULL DEFAULT '#ef4444',
|
||||
icon TEXT NOT NULL DEFAULT '📁',
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
UNIQUE(user_id, name)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_groups_user ON subscription_groups(user_id);
|
||||
|
||||
-- Relation plusieurs-à-plusieurs : une chaîne (abonnement) dans plusieurs groupes.
|
||||
CREATE TABLE IF NOT EXISTS subscription_group_members (
|
||||
group_id TEXT NOT NULL REFERENCES subscription_groups(id) ON DELETE CASCADE,
|
||||
subscription_id INTEGER NOT NULL REFERENCES subscriptions(id) ON DELETE CASCADE,
|
||||
added_at INTEGER NOT NULL,
|
||||
PRIMARY KEY (group_id, subscription_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_group_members_sub ON subscription_group_members(subscription_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_group_members_group ON subscription_group_members(group_id);
|
||||
|
||||
COMMIT;
|
||||
@@ -109,6 +109,30 @@ CREATE TABLE IF NOT EXISTS subscriptions (
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_subs_user ON subscriptions(user_id);
|
||||
|
||||
-- Groupes d'abonnements (façon PocketTube) -----------------------------------
|
||||
CREATE TABLE IF NOT EXISTS subscription_groups (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
color TEXT NOT NULL DEFAULT '#ef4444',
|
||||
icon TEXT NOT NULL DEFAULT '📁',
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
UNIQUE(user_id, name)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_groups_user ON subscription_groups(user_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS subscription_group_members (
|
||||
group_id TEXT NOT NULL REFERENCES subscription_groups(id) ON DELETE CASCADE,
|
||||
subscription_id INTEGER NOT NULL REFERENCES subscriptions(id) ON DELETE CASCADE,
|
||||
added_at INTEGER NOT NULL,
|
||||
PRIMARY KEY (group_id, subscription_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_group_members_sub ON subscription_group_members(subscription_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_sub_group_members_group ON subscription_group_members(group_id);
|
||||
|
||||
-- Playlists -----------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS playlists (
|
||||
id TEXT PRIMARY KEY,
|
||||
|
||||
Reference in New Issue
Block a user