93 lines
2.4 KiB
SQL
93 lines
2.4 KiB
SQL
--------------- MODELS ---------------
|
|
|
|
-- TABLE --
|
|
|
|
CREATE TABLE IF NOT EXISTS models (
|
|
-- ID
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
|
|
-- 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
|
|
api_key TEXT NOT NULL CHECK (char_length(api_key) <= 1000),
|
|
base_url TEXT NOT NULL CHECK (char_length(base_url) <= 1000),
|
|
description TEXT NOT NULL CHECK (char_length(description) <= 500),
|
|
model_id TEXT NOT NULL CHECK (char_length(model_id) <= 1000),
|
|
name TEXT NOT NULL CHECK (char_length(name) <= 100)
|
|
);
|
|
|
|
-- INDEXES --
|
|
|
|
CREATE INDEX models_user_id_idx ON models(user_id);
|
|
|
|
-- RLS --
|
|
|
|
ALTER TABLE models ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Allow full access to own models"
|
|
ON models
|
|
USING (user_id = auth.uid())
|
|
WITH CHECK (user_id = auth.uid());
|
|
|
|
CREATE POLICY "Allow view access to non-private models"
|
|
ON models
|
|
FOR SELECT
|
|
USING (sharing <> 'private');
|
|
|
|
-- TRIGGERS --
|
|
|
|
CREATE TRIGGER update_models_updated_at
|
|
BEFORE UPDATE ON models
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE update_updated_at_column();
|
|
|
|
--------------- MODEL WORKSPACES ---------------
|
|
|
|
-- TABLE --
|
|
|
|
CREATE TABLE IF NOT EXISTS model_workspaces (
|
|
-- REQUIRED RELATIONSHIPS
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
model_id UUID NOT NULL REFERENCES models(id) ON DELETE CASCADE,
|
|
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
|
|
PRIMARY KEY(model_id, workspace_id),
|
|
|
|
-- METADATA
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ
|
|
);
|
|
|
|
-- INDEXES --
|
|
|
|
CREATE INDEX model_workspaces_user_id_idx ON model_workspaces(user_id);
|
|
CREATE INDEX model_workspaces_model_id_idx ON model_workspaces(model_id);
|
|
CREATE INDEX model_workspaces_workspace_id_idx ON model_workspaces(workspace_id);
|
|
|
|
-- RLS --
|
|
|
|
ALTER TABLE model_workspaces ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Allow full access to own model_workspaces"
|
|
ON model_workspaces
|
|
USING (user_id = auth.uid())
|
|
WITH CHECK (user_id = auth.uid());
|
|
|
|
-- TRIGGERS --
|
|
|
|
CREATE TRIGGER update_model_workspaces_updated_at
|
|
BEFORE UPDATE ON model_workspaces
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE update_updated_at_column();
|