chatbot-ui/supabase/migrations/20240115171524_add_tools.sql

91 lines
2.3 KiB
SQL

--------------- TOOLS ---------------
-- TABLE --
CREATE TABLE IF NOT EXISTS tools (
-- ID
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
-- REQUIRED RELATIONSHIPS
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
-- OPTIONAL RELATIONSHIPS
folder_id UUID REFERENCES folders(id) ON DELETE SET NULL,
-- METADATA
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ,
--SHARING
sharing TEXT NOT NULL DEFAULT 'private',
-- REQUIRED
description TEXT NOT NULL CHECK (char_length(description) <= 500),
name TEXT NOT NULL CHECK (char_length(name) <= 100),
schema JSONB NOT NULL,
url TEXT NOT NULL CHECK (char_length(url) <= 1000)
);
-- INDEXES --
CREATE INDEX tools_user_id_idx ON tools(user_id);
-- RLS --
ALTER TABLE tools ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow full access to own tools"
ON tools
USING (user_id = auth.uid())
WITH CHECK (user_id = auth.uid());
CREATE POLICY "Allow view access to non-private tools"
ON tools
FOR SELECT
USING (sharing <> 'private');
-- TRIGGERS --
CREATE TRIGGER update_tools_updated_at
BEFORE UPDATE ON tools
FOR EACH ROW
EXECUTE PROCEDURE update_updated_at_column();
--------------- TOOL WORKSPACES ---------------
-- TABLE --
CREATE TABLE IF NOT EXISTS tool_workspaces (
-- REQUIRED RELATIONSHIPS
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
tool_id UUID NOT NULL REFERENCES tools(id) ON DELETE CASCADE,
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
PRIMARY KEY(tool_id, workspace_id),
-- METADATA
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ
);
-- INDEXES --
CREATE INDEX tool_workspaces_user_id_idx ON tool_workspaces(user_id);
CREATE INDEX tool_workspaces_tool_id_idx ON tool_workspaces(tool_id);
CREATE INDEX tool_workspaces_workspace_id_idx ON tool_workspaces(workspace_id);
-- RLS --
ALTER TABLE tool_workspaces ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow full access to own tool_workspaces"
ON tool_workspaces
USING (user_id = auth.uid())
WITH CHECK (user_id = auth.uid());
-- TRIGGERS --
CREATE TRIGGER update_tool_workspaces_updated_at
BEFORE UPDATE ON tool_workspaces
FOR EACH ROW
EXECUTE PROCEDURE update_updated_at_column();