47 lines
1.6 KiB
SQL
47 lines
1.6 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
-- Per-library admin collection groups.
|
|
CREATE TABLE library_collection_groups (
|
|
library_id INTEGER NOT NULL REFERENCES media_folders(id) ON DELETE CASCADE,
|
|
label TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (library_id, label)
|
|
);
|
|
|
|
-- Per-user personal-collection groups.
|
|
CREATE TABLE user_collection_groups (
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
label TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (user_id, label)
|
|
);
|
|
|
|
ALTER TABLE library_collections
|
|
ADD COLUMN group_label TEXT NOT NULL DEFAULT '';
|
|
|
|
ALTER TABLE user_personal_collections
|
|
ADD COLUMN group_label TEXT NOT NULL DEFAULT '';
|
|
|
|
-- Used by ReorderCollections when scoped by group_label; the user_id
|
|
-- prefix matches the row-ownership filter on every query path.
|
|
CREATE INDEX idx_user_personal_collections_group_order
|
|
ON user_personal_collections (user_id, group_label, sort_order);
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
DROP INDEX IF EXISTS idx_user_personal_collections_group_order;
|
|
|
|
ALTER TABLE user_personal_collections DROP COLUMN IF EXISTS group_label;
|
|
ALTER TABLE library_collections DROP COLUMN IF EXISTS group_label;
|
|
|
|
DROP TABLE IF EXISTS user_collection_groups;
|
|
DROP TABLE IF EXISTS library_collection_groups;
|
|
-- +goose StatementEnd
|