60 lines
2.9 KiB
SQL
60 lines
2.9 KiB
SQL
-- ==========================================
|
|
-- Chat Switchboard — 016 Packages
|
|
-- ==========================================
|
|
-- Unified package registry. Replaces surface_registry (v0.25.0)
|
|
-- and extensions (v0.11.0) tables. A package is a surface, an
|
|
-- extension, or both.
|
|
--
|
|
-- v0.28.7: packages table + package_user_settings in 012.
|
|
-- ==========================================
|
|
|
|
CREATE TABLE IF NOT EXISTS packages (
|
|
id TEXT PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
type TEXT NOT NULL DEFAULT 'surface'
|
|
CHECK (type IN ('surface', 'extension', 'full')),
|
|
version TEXT NOT NULL DEFAULT '0.0.0',
|
|
description TEXT NOT NULL DEFAULT '',
|
|
author TEXT NOT NULL DEFAULT '',
|
|
tier TEXT NOT NULL DEFAULT 'browser'
|
|
CHECK (tier IN ('browser', 'starlark', 'sidecar')),
|
|
is_system BOOLEAN NOT NULL DEFAULT false,
|
|
scope TEXT NOT NULL DEFAULT 'global'
|
|
CHECK (scope IN ('global', 'team', 'personal')),
|
|
team_id UUID REFERENCES teams(id) ON DELETE CASCADE,
|
|
installed_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
manifest JSONB NOT NULL DEFAULT '{}',
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
source TEXT NOT NULL DEFAULT 'core'
|
|
CHECK (source IN ('core', 'builtin', 'extension')),
|
|
installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_packages_type ON packages(type);
|
|
CREATE INDEX IF NOT EXISTS idx_packages_enabled ON packages(enabled) WHERE enabled = true;
|
|
CREATE INDEX IF NOT EXISTS idx_packages_team ON packages(team_id);
|
|
CREATE INDEX IF NOT EXISTS idx_packages_source ON packages(source);
|
|
|
|
COMMENT ON TABLE packages IS 'Unified package registry. Surfaces, extensions, and full packages. Replaces surface_registry + extensions tables.';
|
|
COMMENT ON COLUMN packages.id IS 'Slug identifier from manifest "id" field. Used in URLs: /s/:id';
|
|
COMMENT ON COLUMN packages.type IS 'surface = routable page, extension = hooks/tools/pipes, full = both';
|
|
COMMENT ON COLUMN packages.source IS 'core = page-engine seeded, builtin = extensions/builtin/ seeded, extension = admin-uploaded .pkg';
|
|
COMMENT ON COLUMN packages.enabled IS 'Admin toggle — disabled surfaces redirect to / and hide from nav';
|
|
|
|
|
|
-- =========================================
|
|
-- PACKAGE USER SETTINGS
|
|
-- =========================================
|
|
-- Per-user overrides for packages (enable/disable, custom config).
|
|
-- Replaces extension_user_settings from the former extensions schema.
|
|
-- Lives in 016 (not 012) because of FK dependency on packages table.
|
|
|
|
CREATE TABLE IF NOT EXISTS package_user_settings (
|
|
package_id TEXT NOT NULL REFERENCES packages(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
settings JSONB NOT NULL DEFAULT '{}',
|
|
is_enabled BOOLEAN NOT NULL DEFAULT true,
|
|
PRIMARY KEY (package_id, user_id)
|
|
);
|