aubm / database /schema.sql
cesjavi's picture
Deploy Aubm Docker Space
81ff144
raw
history blame
5.39 kB
-- Aubm Database Schema
-- Designed for Supabase (PostgreSQL)
-- 1. Profiles (User Extensions)
CREATE TABLE IF NOT EXISTS public.profiles (
id UUID PRIMARY KEY REFERENCES auth.users ON DELETE CASCADE,
role TEXT CHECK (role IN ('user', 'manager', 'admin')) DEFAULT 'user',
full_name TEXT,
avatar_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 2. Projects
CREATE TABLE IF NOT EXISTS public.projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
description TEXT,
context TEXT,
owner_id UUID REFERENCES auth.users ON DELETE CASCADE,
status TEXT CHECK (status IN ('active', 'archived', 'completed')) DEFAULT 'active',
is_public BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 3. Agents (AI Identities)
CREATE TABLE IF NOT EXISTS public.agents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES auth.users ON DELETE CASCADE,
name TEXT NOT NULL,
role TEXT,
api_provider TEXT NOT NULL,
model TEXT NOT NULL,
system_prompt TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 4. Tasks (Units of work)
CREATE TABLE IF NOT EXISTS public.tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES public.projects ON DELETE CASCADE,
assigned_agent_id UUID REFERENCES public.agents ON DELETE SET NULL,
title TEXT NOT NULL,
description TEXT,
status TEXT CHECK (status IN ('todo', 'in_progress', 'awaiting_approval', 'done', 'failed', 'cancelled')) DEFAULT 'todo',
priority INTEGER DEFAULT 0,
is_critical BOOLEAN DEFAULT FALSE,
output_data JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 5. Task Runs (Execution History)
CREATE TABLE IF NOT EXISTS public.task_runs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID REFERENCES public.tasks ON DELETE CASCADE,
agent_id UUID REFERENCES public.agents ON DELETE SET NULL,
status TEXT CHECK (status IN ('queued', 'running', 'completed', 'failed', 'cancelled')) DEFAULT 'queued',
error_message TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
finished_at TIMESTAMPTZ
);
-- 6. Agent Logs (Execution Traces)
CREATE TABLE IF NOT EXISTS public.agent_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID REFERENCES public.tasks ON DELETE CASCADE,
run_id UUID REFERENCES public.task_runs ON DELETE CASCADE,
action TEXT,
content TEXT,
metadata JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 7. App Config (Global Settings)
CREATE TABLE IF NOT EXISTS public.app_config (
key TEXT PRIMARY KEY,
value JSONB,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- RLS (Row Level Security) - Initial setup
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.projects ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.agents ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.tasks ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.task_runs ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.agent_logs ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.app_config ENABLE ROW LEVEL SECURITY;
-- Basic Policies (To be refined)
-- Projects: Owners can do anything, others can read if public
CREATE POLICY "Projects visibility" ON public.projects
FOR SELECT USING (auth.uid() = owner_id OR is_public = true);
CREATE POLICY "Projects ownership" ON public.projects
FOR ALL USING (auth.uid() = owner_id);
-- Tasks: Protected by project ownership
CREATE POLICY "Tasks visibility" ON public.tasks
FOR SELECT USING (EXISTS (
SELECT 1 FROM public.projects
WHERE projects.id = tasks.project_id AND (projects.owner_id = auth.uid() OR projects.is_public = true)
));
CREATE POLICY "Project owners can create tasks" ON public.tasks
FOR INSERT TO authenticated WITH CHECK (EXISTS (
SELECT 1 FROM public.projects
WHERE projects.id = tasks.project_id AND projects.owner_id = auth.uid()
));
CREATE POLICY "Project owners can update tasks" ON public.tasks
FOR UPDATE TO authenticated USING (EXISTS (
SELECT 1 FROM public.projects
WHERE projects.id = tasks.project_id AND projects.owner_id = auth.uid()
)) WITH CHECK (EXISTS (
SELECT 1 FROM public.projects
WHERE projects.id = tasks.project_id AND projects.owner_id = auth.uid()
));
CREATE POLICY "Project owners can delete tasks" ON public.tasks
FOR DELETE TO authenticated USING (EXISTS (
SELECT 1 FROM public.projects
WHERE projects.id = tasks.project_id AND projects.owner_id = auth.uid()
));
-- Agents: Marketplace templates are readable by all authenticated users.
-- Deployed agents are owned by the user who deployed them.
CREATE POLICY "Agents readable" ON public.agents
FOR SELECT TO authenticated USING (true);
CREATE POLICY "Users can create own agents" ON public.agents
FOR INSERT TO authenticated WITH CHECK (auth.uid() = user_id);
CREATE POLICY "Users can update own agents" ON public.agents
FOR UPDATE TO authenticated USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id);
CREATE POLICY "Users can delete own agents" ON public.agents
FOR DELETE TO authenticated USING (auth.uid() = user_id);