2026-06-06 23:51:30 -04:00
|
|
|
-- +goose Up
|
|
|
|
|
-- +goose StatementBegin
|
2026-05-22 20:26:11 -04:00
|
|
|
CREATE TABLE plugin_repositories (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
url TEXT NOT NULL UNIQUE,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
|
display_name TEXT NOT NULL,
|
|
|
|
|
last_fetched_at TIMESTAMPTZ,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX idx_plugin_repositories_enabled
|
|
|
|
|
ON plugin_repositories (enabled);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_installations (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
repository_id BIGINT REFERENCES plugin_repositories(id) ON DELETE SET NULL,
|
|
|
|
|
plugin_id TEXT NOT NULL,
|
|
|
|
|
version TEXT NOT NULL,
|
|
|
|
|
install_path TEXT NOT NULL,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX idx_plugin_installations_plugin_version
|
|
|
|
|
ON plugin_installations (plugin_id, version);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_capabilities (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
capability_type TEXT NOT NULL,
|
|
|
|
|
capability_id TEXT NOT NULL,
|
|
|
|
|
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX idx_plugin_capabilities_installation
|
|
|
|
|
ON plugin_capabilities (plugin_installation_id);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_plugin_capabilities_installation_capability
|
|
|
|
|
ON plugin_capabilities (plugin_installation_id, capability_type, capability_id);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_runtime_configs (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
config_key TEXT NOT NULL,
|
|
|
|
|
config_value JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_plugin_runtime_configs_installation_key
|
|
|
|
|
ON plugin_runtime_configs (plugin_installation_id, config_key);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_task_bindings (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
capability_id TEXT NOT NULL,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
|
trigger JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_plugin_task_bindings_installation_capability
|
|
|
|
|
ON plugin_task_bindings (plugin_installation_id, capability_id);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_auth_bindings (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
capability_id TEXT NOT NULL,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
|
display_order INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
auto_provision BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
|
default_login BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_plugin_auth_bindings_installation_capability
|
|
|
|
|
ON plugin_auth_bindings (plugin_installation_id, capability_id);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE plugin_auth_identities (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
external_subject TEXT NOT NULL,
|
|
|
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_plugin_auth_identities_installation_subject
|
|
|
|
|
ON plugin_auth_identities (plugin_installation_id, external_subject);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE media_analyzer_bindings (
|
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
|
media_folder_id INTEGER NOT NULL REFERENCES media_folders(id) ON DELETE CASCADE,
|
|
|
|
|
plugin_installation_id BIGINT NOT NULL REFERENCES plugin_installations(id) ON DELETE CASCADE,
|
|
|
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX idx_media_analyzer_bindings_folder_installation
|
|
|
|
|
ON media_analyzer_bindings (media_folder_id, plugin_installation_id);
|
|
|
|
|
|
|
|
|
|
ALTER TABLE media_files
|
|
|
|
|
ADD COLUMN markers_source TEXT,
|
|
|
|
|
ADD COLUMN markers_confidence DOUBLE PRECISION;
|
2026-06-06 23:51:30 -04:00
|
|
|
-- +goose StatementEnd
|
|
|
|
|
|
|
|
|
|
-- +goose Down
|
|
|
|
|
-- +goose StatementBegin
|
|
|
|
|
ALTER TABLE media_files
|
|
|
|
|
DROP COLUMN markers_confidence,
|
|
|
|
|
DROP COLUMN markers_source;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_media_analyzer_bindings_folder_installation;
|
|
|
|
|
DROP TABLE IF EXISTS media_analyzer_bindings;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_auth_identities_installation_subject;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_auth_identities;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_auth_bindings_installation_capability;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_auth_bindings;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_task_bindings_installation_capability;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_task_bindings;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_runtime_configs_installation_key;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_runtime_configs;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_capabilities_installation_capability;
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_capabilities_installation;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_capabilities;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_installations_plugin_version;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_installations;
|
|
|
|
|
|
|
|
|
|
DROP INDEX IF EXISTS idx_plugin_repositories_enabled;
|
|
|
|
|
DROP TABLE IF EXISTS plugin_repositories;
|
|
|
|
|
-- +goose StatementEnd
|