vision1.0.1 / 20250506000002_project_functions.sql
lattmamb's picture
Upload 229 files
aa916fd verified
-- Add project management functions
-- Function to create a project with account validation
CREATE OR REPLACE FUNCTION create_project(
name TEXT,
description TEXT,
account_id UUID
) RETURNS json
LANGUAGE plpgsql SECURITY DEFINER
AS $$
DECLARE
new_project_id uuid;
project_data json;
BEGIN
-- Insert project
INSERT INTO public.projects (name, description, account_id)
VALUES (create_project.name, create_project.description, create_project.account_id)
RETURNING project_id INTO new_project_id;
-- Get the full project data
SELECT json_build_object(
'project_id', p.project_id,
'name', p.name,
'description', p.description,
'account_id', p.account_id,
'sandbox', p.sandbox,
'created_at', p.created_at,
'updated_at', p.updated_at
) INTO project_data
FROM public.projects p
WHERE p.project_id = new_project_id;
RETURN project_data;
END;
$$;
-- Function to update a project
CREATE OR REPLACE FUNCTION update_project(
project_id UUID,
name TEXT,
description TEXT
) RETURNS json
LANGUAGE plpgsql SECURITY DEFINER
AS $$
DECLARE
updated_project_data json;
BEGIN
-- Update the project
UPDATE public.projects
SET
name = COALESCE(update_project.name, name),
description = COALESCE(update_project.description, description),
updated_at = now()
WHERE project_id = update_project.project_id;
-- Get the updated project data
SELECT json_build_object(
'project_id', p.project_id,
'name', p.name,
'description', p.description,
'account_id', p.account_id,
'sandbox', p.sandbox,
'created_at', p.created_at,
'updated_at', p.updated_at
) INTO updated_project_data
FROM public.projects p
WHERE p.project_id = update_project.project_id;
RETURN updated_project_data;
END;
$$;
-- Function to update a project's sandbox information
CREATE OR REPLACE FUNCTION update_project_sandbox(
project_id UUID,
sandbox_data jsonb
) RETURNS json
LANGUAGE plpgsql SECURITY DEFINER
AS $$
DECLARE
updated_project_data json;
BEGIN
-- Update the project sandbox data
UPDATE public.projects
SET
sandbox = sandbox_data,
updated_at = now()
WHERE project_id = update_project_sandbox.project_id;
-- Get the updated project data
SELECT json_build_object(
'project_id', p.project_id,
'name', p.name,
'description', p.description,
'account_id', p.account_id,
'sandbox', p.sandbox,
'created_at', p.created_at,
'updated_at', p.updated_at
) INTO updated_project_data
FROM public.projects p
WHERE p.project_id = update_project_sandbox.project_id;
RETURN updated_project_data;
END;
$$;