All checks were successful
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
67 lines
2.9 KiB
SQL
67 lines
2.9 KiB
SQL
-- ==========================================
|
|
-- Armature — 004 Connections & Dependencies
|
|
-- ==========================================
|
|
|
|
CREATE TABLE IF NOT EXISTS ext_connections (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
type TEXT NOT NULL,
|
|
package_id TEXT NOT NULL,
|
|
scope VARCHAR(10) NOT NULL
|
|
CHECK (scope IN ('global', 'team', 'personal')),
|
|
owner_id TEXT NOT NULL DEFAULT '',
|
|
name TEXT NOT NULL,
|
|
config JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
is_active BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE(type, scope, owner_id, name)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_ext_connections_type ON ext_connections(type);
|
|
CREATE INDEX IF NOT EXISTS idx_ext_connections_scope ON ext_connections(scope);
|
|
CREATE INDEX IF NOT EXISTS idx_ext_connections_owner ON ext_connections(owner_id) WHERE owner_id != '';
|
|
CREATE INDEX IF NOT EXISTS idx_ext_connections_active ON ext_connections(is_active) WHERE is_active = true;
|
|
|
|
DROP TRIGGER IF EXISTS ext_connections_updated_at ON ext_connections;
|
|
CREATE TRIGGER ext_connections_updated_at BEFORE UPDATE ON ext_connections
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
-- ── Extension Dependencies ──────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS ext_dependencies (
|
|
consumer_id TEXT NOT NULL,
|
|
library_id TEXT NOT NULL,
|
|
version_spec TEXT NOT NULL DEFAULT '>=0.0.0',
|
|
resolved_ver TEXT NOT NULL DEFAULT '0.0.0',
|
|
PRIMARY KEY (consumer_id, library_id),
|
|
FOREIGN KEY (consumer_id) REFERENCES packages(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (library_id) REFERENCES packages(id) ON DELETE RESTRICT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_ext_deps_consumer ON ext_dependencies(consumer_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ext_deps_library ON ext_dependencies(library_id);
|
|
|
|
-- ── Resource Grants ─────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS resource_grants (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
resource_type VARCHAR(30) NOT NULL,
|
|
resource_id UUID NOT NULL,
|
|
grant_scope VARCHAR(20) NOT NULL DEFAULT 'team_only'
|
|
CHECK (grant_scope IN ('team_only', 'global', 'groups')),
|
|
granted_groups UUID[] NOT NULL DEFAULT '{}',
|
|
created_by UUID NOT NULL REFERENCES users(id),
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE(resource_type, resource_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_resource_grants_resource
|
|
ON resource_grants(resource_type, resource_id);
|
|
CREATE INDEX IF NOT EXISTS idx_resource_grants_groups
|
|
ON resource_grants USING gin(granted_groups);
|
|
|
|
DROP TRIGGER IF EXISTS resource_grants_updated_at ON resource_grants;
|
|
CREATE TRIGGER resource_grants_updated_at BEFORE UPDATE ON resource_grants
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|