add query "find_reference_by_id"

This commit is contained in:
2019-08-28 17:10:50 +02:00
parent b5cb238061
commit 51ea82d2a4
6 changed files with 44 additions and 37 deletions

View File

@@ -9,9 +9,7 @@ begin
from ( from (
select select
com.*, com.*,
-- TODO use generic object, not article find_reference_by_id(com.target_id, com.target_reference) as target,
-- json_build_object('id', com.target_id) as target,
find_article_by_id(com.target_id) as target,
find_citizen_by_id(com.created_by_id) as created_by find_citizen_by_id(com.created_by_id) as created_by
from "comment" as com from "comment" as com
where id = _id where id = _id

View File

@@ -1,5 +1,6 @@
create or replace function find_comments_by_citizen( create or replace function find_comments_by_citizen(
_created_by_id uuid, _created_by_id uuid,
_reference regclass default null,
"limit" int default 50, "limit" int default 50,
"offset" int default 0, "offset" int default 0,
out resource json, out resource json,
@@ -7,17 +8,31 @@ create or replace function find_comments_by_citizen(
) language plpgsql as ) language plpgsql as
$$ $$
begin begin
select json_agg(t), (select count(id) from "comment" where created_by_id = _created_by_id) select
json_agg(t),
(
select count(id) from "comment"
where
(_reference is null or _reference = target_reference)
and created_by_id = _created_by_id
)
into resource, total into resource, total
from ( from (
select select
com.*, com.*,
json_build_object('id', com.target_id) as target, find_reference_by_id(com.target_id, _reference) as target,
find_citizen_by_id(com.created_by_id) as created_by find_citizen_by_id(com.created_by_id) as created_by
from "comment" as com from "comment" as com
where created_by_id = _created_by_id
order by created_at desc, where
com.created_at desc (_reference is null or _reference = target_reference)
and created_by_id = _created_by_id
order by
created_at desc,
com.created_at desc
limit "limit" offset "offset" limit "limit" offset "offset"
) as t; ) as t;
end; end;

View File

@@ -12,7 +12,7 @@ begin
from ( from (
select select
com.*, com.*,
json_build_object('id', com.target_id) as target, find_reference_by_id(com.target_id, com.target_reference) as target,
find_citizen_by_id(com.created_by_id) as created_by find_citizen_by_id(com.created_by_id) as created_by
from "comment" as com from "comment" as com
where com.parents_ids @> array[_parent_id] where com.parents_ids @> array[_parent_id]

View File

@@ -12,7 +12,7 @@ begin
from ( from (
select select
com.*, com.*,
json_build_object('id', com.target_id) as target, find_reference_by_id(com.target_id, com.target_reference) as target,
find_citizen_by_id(com.created_by_id) as created_by find_citizen_by_id(com.created_by_id) as created_by
from "comment" as com from "comment" as com
where com.target_id = _target_id where com.target_id = _target_id

View File

@@ -1,27 +0,0 @@
create or replace function find_comments_constitution_by_citizen(
_created_by_id uuid,
"limit" int default 50,
"offset" int default 0,
out resource json,
out total int
) language plpgsql as
$$
begin
select json_agg(t), (select count(id) from comment where target_reference = 'constitution'::regclass)
into resource, total
from (
select
com.*,
find_constitution_by_id(com.target_id) as target,
find_citizen_by_id(com.created_by_id) as created_by
from comment as com
where created_by_id = _created_by_id
and target_reference = 'constitution'::regclass
order by created_at desc,
com.created_at desc
limit "limit" offset "offset"
) as t;
end;
$$;
-- drop function if exists find_comments_constitution_by_citizen(uuid, int, int);

View File

@@ -0,0 +1,21 @@
create or replace function find_reference_by_id(
_id uuid,
_reference regclass default null,
out resource json
) language plpgsql as
$$
begin
select
case _reference
when 'article'::regclass then
find_article_by_id(_id)
when 'constitution'::regclass then
find_article_by_id(_id)
else
json_build_object('id', _id)
end
into resource;
end;
$$;
-- drop function if exists find_reference_by_id(uuid, regclass, out json);