Spaces:
Sleeping
Sleeping
-- Create required schemas | |
CREATE SCHEMA IF NOT EXISTS auth; | |
CREATE SCHEMA IF NOT EXISTS storage; | |
CREATE SCHEMA IF NOT EXISTS basejump; | |
-- Create basic roles | |
CREATE ROLE IF NOT EXISTS anon NOLOGIN; | |
GRANT USAGE ON SCHEMA public TO anon; | |
GRANT USAGE ON SCHEMA auth TO anon; | |
GRANT USAGE ON SCHEMA basejump TO anon; | |
-- Create a basic users table if it doesn't exist | |
CREATE TABLE IF NOT EXISTS auth.users ( | |
id uuid PRIMARY KEY, | |
email text UNIQUE, | |
encrypted_password text, | |
created_at timestamp with time zone DEFAULT now(), | |
updated_at timestamp with time zone DEFAULT now() | |
); | |
-- Add Basejump configuration | |
CREATE TABLE IF NOT EXISTS basejump.config ( | |
enable_team_accounts boolean DEFAULT true, | |
enable_personal_account_billing boolean DEFAULT true, | |
enable_team_account_billing boolean DEFAULT true | |
); | |
-- Insert default config if table is empty | |
INSERT INTO basejump.config (enable_team_accounts, enable_personal_account_billing, enable_team_account_billing) | |
SELECT true, true, true | |
WHERE NOT EXISTS (SELECT 1 FROM basejump.config); | |
-- Create accounts table for Suna | |
CREATE TABLE IF NOT EXISTS public.accounts ( | |
id uuid PRIMARY KEY DEFAULT gen_random_uuid(), | |
name text NOT NULL, | |
slug text UNIQUE NOT NULL, | |
created_at timestamptz DEFAULT now(), | |
updated_at timestamptz DEFAULT now() | |
); | |
-- Create projects table for Suna | |
CREATE TABLE IF NOT EXISTS public.projects ( | |
project_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), | |
name text NOT NULL, | |
description text, | |
account_id uuid REFERENCES public.accounts(id) ON DELETE CASCADE, | |
sandbox jsonb DEFAULT NULL, | |
created_at timestamptz DEFAULT now(), | |
updated_at timestamptz DEFAULT now() | |
); | |
-- Create a function to create accounts | |
CREATE OR REPLACE FUNCTION create_account( | |
name TEXT, | |
slug TEXT | |
) RETURNS json | |
LANGUAGE plpgsql SECURITY DEFINER | |
AS $$ | |
DECLARE | |
account_id uuid; | |
existing_account_id uuid; | |
return_data json; | |
BEGIN | |
-- Check if slug is already taken | |
SELECT id INTO existing_account_id FROM public.accounts WHERE accounts.slug = create_account.slug; | |
IF existing_account_id IS NOT NULL THEN | |
RETURN json_build_object('error', 'Slug already taken'); | |
END IF; | |
-- Insert account | |
INSERT INTO public.accounts (name, slug) | |
VALUES (create_account.name, create_account.slug) | |
RETURNING id INTO account_id; | |
return_data := json_build_object( | |
'id', account_id, | |
'name', name, | |
'slug', slug | |
); | |
RETURN return_data; | |
END; | |
$$; |