35 lines
1.1 KiB
PL/PgSQL
35 lines
1.1 KiB
PL/PgSQL
create or replace function create_title_in_constitution(title json, constitution_id uuid default null, out resource json)
|
|
language plpgsql as
|
|
$$
|
|
declare
|
|
_title alias for title;
|
|
_constitution_id uuid = coalesce(constitution_id, (title#>>'{constitution_id}')::uuid);
|
|
_author_id uuid = (title#>>'{created_by, id}')::uuid;
|
|
new_id uuid;
|
|
begin
|
|
insert into title (created_by_id, name, rank, constitution_id)
|
|
select
|
|
_author_id,
|
|
ti.name,
|
|
row_number() OVER (),
|
|
_constitution_id
|
|
from json_populate_record(null::title, _title) ti
|
|
returning id into new_id;
|
|
|
|
if (_title->'articles' is not null) then
|
|
insert into article_in_title (created_by_id, rank, title_id, article_id, constitution_id)
|
|
select
|
|
_author_id,
|
|
row_number() over (),
|
|
new_id,
|
|
id,
|
|
coalesce ((_title->>'constitution_id')::uuid, _constitution_id)
|
|
from json_populate_recordset(null::article, _title->'articles') ;
|
|
end if;
|
|
|
|
select find_constitution_title_by_id(new_id)
|
|
into resource;
|
|
end;
|
|
$$;
|
|
|
|
-- drop function if exists create_title_in_constitution(out json); |