Refactor SQL function Comment

This commit is contained in:
2019-10-06 23:49:20 +02:00
parent 9cbba66a36
commit 6d4339f2a5
4 changed files with 46 additions and 34 deletions

View File

@@ -1,24 +1,23 @@
create or replace function comment(reference regclass, target_id uuid, created_by_id uuid, content text, parent_comment_id uuid default null, out id uuid)
create or replace function comment(reference regclass, resource json, out _id uuid)
language plpgsql as
$$
declare
_created_by_id alias for created_by_id;
_target_id alias for target_id;
_content alias for content;
_parent_comment_id alias for parent_comment_id;
_id alias for id;
_created_by_id uuid = resource#>>'{created_by,id}';
_target_id uuid = resource#>>'{target,id}';
_content text = resource#>>'{content}';
_parent_comment_id uuid = resource#>>'{parent,id}';
_new_id uuid = coalesce((resource->>'id')::uuid, uuid_generate_v4());
begin
if reference = 'article'::regclass then
insert into comment_on_article (created_by_id, target_id, content, parent_comment_id)
values (_created_by_id, _target_id, _content, _parent_comment_id)
returning comment_on_article.id into _id;
insert into comment_on_article (id, created_by_id, target_id, content, parent_comment_id)
values (_new_id, _created_by_id, _target_id, _content, _parent_comment_id);
elseif reference = 'constitution'::regclass then
insert into comment_on_constitution (created_by_id, target_id, content, parent_comment_id)
values (_created_by_id, _target_id, _content, _parent_comment_id)
returning comment_on_constitution.id into _id;
insert into comment_on_constitution (id, created_by_id, target_id, content, parent_comment_id)
values (_new_id, _created_by_id, _target_id, _content, _parent_comment_id);
else
raise exception 'comment with target as "%", is no implemented', reference::text;
end if;
_id = _new_id;
end;
$$;