32 lines
912 B
PL/PgSQL
32 lines
912 B
PL/PgSQL
create or replace procedure upsert_constitution(inout resource json)
|
|
language plpgsql as
|
|
$$
|
|
declare
|
|
titles json;
|
|
new_id uuid;
|
|
begin
|
|
insert into constitution (version_id, created_by_id, title, annonymous)
|
|
select
|
|
version_id,
|
|
(resource#>>'{created_by, id}')::uuid,
|
|
title,
|
|
annonymous
|
|
from json_populate_record(null::constitution, resource)
|
|
returning id into new_id;
|
|
|
|
titles := (resource->>'titles');
|
|
|
|
insert into title (created_by_id, name, rank, constitution_id)
|
|
select
|
|
coalesce((ti#>>'{created_by, id}')::uuid, (resource#>>'{created_by, id}')::uuid),
|
|
ti->>'name',
|
|
row_number() OVER (),
|
|
new_id
|
|
from json_array_elements(titles) ti,
|
|
lateral json_populate_record(null::title, ti);
|
|
|
|
select find_constitution_by_id(new_id) into resource;
|
|
end;
|
|
$$;
|
|
|
|
-- drop procedure if exists upsert_constitution(inout json); |