Spaces:
Sleeping
Sleeping
-- 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; | |
$$; |