Files
silo-server/migrations/sql/123_collection_groups.sql
T

47 lines
1.6 KiB
SQL
Raw Normal View History

-- +goose Up
-- +goose StatementBegin
2026-05-22 20:26:11 -04:00
-- 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