Fix following in other version of article
This commit is contained in:
@@ -55,13 +55,14 @@ sealed class Follow<IN : TargetRef, OUT : TargetRef>(override var requester: Req
|
||||
|
||||
open fun findFollow(
|
||||
citizen: CitizenI,
|
||||
target: UuidEntity
|
||||
target: TargetRef
|
||||
): FollowEntity<OUT>? =
|
||||
requester
|
||||
.getFunction("find_follow")
|
||||
.selectOne(
|
||||
"citizen_id" to citizen.id,
|
||||
"target_id" to target.id
|
||||
"target_id" to target.id,
|
||||
"target_reference" to target.reference
|
||||
)
|
||||
|
||||
fun findFollowsByTarget(
|
||||
|
||||
@@ -1,22 +1,43 @@
|
||||
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
|
||||
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(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;
|
||||
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(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(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;
|
||||
|
||||
Reference in New Issue
Block a user