Files
dc-project/src/main/resources/sql/functions/follow/find_follow.sql
Fabrice Lecomte 7874f5cec4 #55 Can be assign a role to members of my Workgroup
Remove Owner on Workgroup (use role MASTER instead)
"find_citizen_by_id" not return user anymore, use "find_citizen_by_id_with_user" instead
2020-06-01 13:46:15 +02:00

45 lines
1.3 KiB
PL/PgSQL

create or replace function find_follow(
_target_id uuid,
_citizen_id uuid,
_target_reference regclass,
out resource json,
out following boolean
) language plpgsql as
$$
declare
_target_ids uuid[];
begin
if (_target_reference = 'article'::regclass) then
select array_agg(a2.id) into _target_ids
from article a1
join article a2 using (version_id)
where a1.id = _target_id;
select to_json(t) into resource from (
select
f.*,
json_build_object('id', f.target_id, 'reference', f.target_reference) as target,
find_citizen_by_id_with_user(f.created_by_id) as created_by
from follow as f
where f.created_by_id = _citizen_id
and array[f.target_id] <@ _target_ids
limit 1
) as t;
else
select to_json(t)
into resource
from (
select
f.*,
json_build_object('id', f.target_id, 'reference', f.target_reference) as target,
find_citizen_by_id_with_user(f.created_by_id) as created_by
from follow as f
where f.created_by_id = _citizen_id
and f.target_id = _target_id
) as t;
end if;
select resource is not null into following;
end;
$$;