Fix unfollow on multiple version of article/constitution

This commit is contained in:
2020-02-27 22:56:41 +01:00
parent e8d342a729
commit d34ae52522
2 changed files with 44 additions and 5 deletions

View File

@@ -1,12 +1,39 @@
create or replace function unfollow(reference regclass, _target_id uuid, _created_by_id uuid) returns void
language plpgsql as
$$
declare
_targets_ids uuid[];
begin
delete
from follow f
where f.created_by_id = _created_by_id
and f.target_id = _target_id
and f.target_reference = reference;
if reference = 'article'::regclass then
select array_agg(a2.id) into _targets_ids
from article a1
join article a2 using (version_id)
where a1.id = _target_id;
delete
from follow f
where f.created_by_id = _created_by_id
and f.target_id = any(_targets_ids)
and f.target_reference = reference;
elseif reference = 'constitution'::regclass then
select array_agg(c2.id) into _targets_ids
from constitution c1
join constitution c2 using (version_id)
where c1.id = _target_id;
delete
from follow f
where f.created_by_id = _created_by_id
and f.target_id = any(_targets_ids)
and f.target_reference = reference;
elseif reference = 'citizen'::regclass then
delete
from follow f
where f.created_by_id = _created_by_id
and f.target_id = _target_id
and f.target_reference = reference;
else
raise exception '% no implemented for follow', reference::text;
end if;
end;
$$;