48 lines
929 B
PL/PgSQL
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;
|