Shelves (e.g. Kids Films) are defined in settings; node roots bind paths to shelves so the same Stremio catalog aggregates content across nodes.
59 lines
2.4 KiB
SQL
59 lines
2.4 KiB
SQL
-- CreateEnum
|
|
DO $$ BEGIN
|
|
CREATE TYPE "LibraryShelfKind" AS ENUM ('MOVIE', 'SERIES');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE IF NOT EXISTS "library_shelves" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"kind" "LibraryShelfKind" NOT NULL,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "library_shelves_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "library_shelves_slug_key" ON "library_shelves"("slug");
|
|
|
|
CREATE TABLE IF NOT EXISTS "node_scan_roots" (
|
|
"id" TEXT NOT NULL,
|
|
"node_id" TEXT NOT NULL,
|
|
"path" TEXT NOT NULL,
|
|
"shelf_id" TEXT NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "node_scan_roots_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "node_scan_roots_node_id_path_key" ON "node_scan_roots"("node_id", "path");
|
|
CREATE INDEX IF NOT EXISTS "node_scan_roots_shelf_id_idx" ON "node_scan_roots"("shelf_id");
|
|
|
|
ALTER TABLE "media_files" ADD COLUMN IF NOT EXISTS "shelf_id" TEXT;
|
|
CREATE INDEX IF NOT EXISTS "media_files_shelf_id_idx" ON "media_files"("shelf_id");
|
|
|
|
DO $$ BEGIN
|
|
ALTER TABLE "node_scan_roots" ADD CONSTRAINT "node_scan_roots_node_id_fkey"
|
|
FOREIGN KEY ("node_id") REFERENCES "nodes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
EXCEPTION WHEN duplicate_object THEN null; END $$;
|
|
|
|
DO $$ BEGIN
|
|
ALTER TABLE "node_scan_roots" ADD CONSTRAINT "node_scan_roots_shelf_id_fkey"
|
|
FOREIGN KEY ("shelf_id") REFERENCES "library_shelves"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
EXCEPTION WHEN duplicate_object THEN null; END $$;
|
|
|
|
DO $$ BEGIN
|
|
ALTER TABLE "media_files" ADD CONSTRAINT "media_files_shelf_id_fkey"
|
|
FOREIGN KEY ("shelf_id") REFERENCES "library_shelves"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
EXCEPTION WHEN duplicate_object THEN null; END $$;
|
|
|
|
-- Default shelves
|
|
INSERT INTO "library_shelves" ("id", "name", "slug", "kind", "sort_order", "enabled", "created_at", "updated_at")
|
|
VALUES
|
|
('00000000-0000-4000-8000-000000000001', 'Films', 'films', 'MOVIE', 0, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
|
('00000000-0000-4000-8000-000000000002', 'Series', 'series', 'SERIES', 1, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
ON CONFLICT ("slug") DO NOTHING;
|