hwhub/db/atomic_create_collection_with_owner.sql

48 lines
929 B
PL/PgSQL

-- Atomic collection creation + owner membership insert
-- Run this in Supabase SQL Editor.
create or replace function public.create_collection_with_owner(
p_name text,
p_description text default null
)
returns public.collections
language plpgsql
security definer
set search_path = public
as $$
declare
v_user_id uuid := auth.uid();
v_collection public.collections;
begin
if v_user_id is null then
raise exception 'Not authenticated';
end if;
insert into public.collections (
name,
owner_id,
description
)
values (
p_name,
v_user_id,
nullif(trim(p_description), '')
)
returning * into v_collection;
insert into public.collection_members (
collection_id,
user_id,
role
)
values (
v_collection.id,
v_user_id,
'owner'
);
return v_collection;
end;
$$;
grant execute on function public.create_collection_with_owner(text, text) to authenticated;