fix duplicate follow
This commit is contained in:
@@ -1,19 +1,21 @@
|
|||||||
create or replace function follow(reference regclass, target_id uuid, citizen_id uuid) returns void
|
create or replace function follow(reference regclass, _target_id uuid, _citizen_id uuid) returns void
|
||||||
language plpgsql as
|
language plpgsql as
|
||||||
$$
|
$$
|
||||||
declare
|
|
||||||
_citizen_id alias for citizen_id;
|
|
||||||
_target_id alias for target_id;
|
|
||||||
begin
|
begin
|
||||||
if reference = 'article'::regclass then
|
if reference = 'article'::regclass then
|
||||||
insert into follow_article (citizen_id, target_id)
|
insert into follow_article (citizen_id, target_id)
|
||||||
values (_citizen_id, _target_id);
|
values (_citizen_id, _target_id)
|
||||||
|
on conflict (citizen_id, target_id) do nothing;
|
||||||
elseif reference = 'constitution'::regclass then
|
elseif reference = 'constitution'::regclass then
|
||||||
insert into follow_constitution (citizen_id, target_id)
|
insert into follow_constitution (citizen_id, target_id)
|
||||||
values (_citizen_id, _target_id);
|
values (_citizen_id, _target_id)
|
||||||
|
on conflict (citizen_id, target_id) do nothing;
|
||||||
elseif reference = 'citizen'::regclass then
|
elseif reference = 'citizen'::regclass then
|
||||||
insert into follow_citizen (citizen_id, target_id)
|
insert into follow_citizen (citizen_id, target_id)
|
||||||
values (_citizen_id, _target_id);
|
values (_citizen_id, _target_id)
|
||||||
|
on conflict (citizen_id, target_id) do nothing;
|
||||||
|
else
|
||||||
|
raise exception '% no implemented', reference::text;
|
||||||
end if;
|
end if;
|
||||||
end;
|
end;
|
||||||
$$;
|
$$;
|
||||||
|
|||||||
@@ -193,7 +193,8 @@ create table extra
|
|||||||
create table follow
|
create table follow
|
||||||
(
|
(
|
||||||
foreign key (citizen_id) references citizen (id),
|
foreign key (citizen_id) references citizen (id),
|
||||||
primary key (id)
|
primary key (id),
|
||||||
|
unique (citizen_id, target_id)
|
||||||
) inherits (extra);
|
) inherits (extra);
|
||||||
|
|
||||||
create table follow_article
|
create table follow_article
|
||||||
@@ -201,7 +202,8 @@ create table follow_article
|
|||||||
target_reference regclass default 'article'::regclass not null,
|
target_reference regclass default 'article'::regclass not null,
|
||||||
foreign key (citizen_id) references citizen (id),
|
foreign key (citizen_id) references citizen (id),
|
||||||
foreign key (target_id) references article (id),
|
foreign key (target_id) references article (id),
|
||||||
primary key (id)
|
primary key (id),
|
||||||
|
unique (citizen_id, target_id)
|
||||||
) inherits (follow);
|
) inherits (follow);
|
||||||
|
|
||||||
create table follow_constitution
|
create table follow_constitution
|
||||||
@@ -209,7 +211,8 @@ create table follow_constitution
|
|||||||
target_reference regclass default 'constitution'::regclass not null,
|
target_reference regclass default 'constitution'::regclass not null,
|
||||||
foreign key (citizen_id) references citizen (id),
|
foreign key (citizen_id) references citizen (id),
|
||||||
foreign key (target_id) references constitution (id),
|
foreign key (target_id) references constitution (id),
|
||||||
primary key (id)
|
primary key (id),
|
||||||
|
unique (citizen_id, target_id)
|
||||||
) inherits (follow);
|
) inherits (follow);
|
||||||
|
|
||||||
create table follow_citizen
|
create table follow_citizen
|
||||||
@@ -217,7 +220,8 @@ create table follow_citizen
|
|||||||
target_reference regclass default 'citizen'::regclass not null,
|
target_reference regclass default 'citizen'::regclass not null,
|
||||||
foreign key (citizen_id) references citizen (id),
|
foreign key (citizen_id) references citizen (id),
|
||||||
foreign key (target_id) references citizen (id),
|
foreign key (target_id) references citizen (id),
|
||||||
primary key (id)
|
primary key (id),
|
||||||
|
unique (citizen_id, target_id)
|
||||||
) inherits (follow);
|
) inherits (follow);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ begin
|
|||||||
assert (select count(*) = 1 from "comment"), 'edit comment must not insert new comment';
|
assert (select count(*) = 1 from "comment"), 'edit comment must not insert new comment';
|
||||||
assert (select count(*) = 1 from "comment" where content = 'edited'), 'edit comment must not insert new comment';
|
assert (select count(*) = 1 from "comment" where content = 'edited'), 'edit comment must not insert new comment';
|
||||||
|
|
||||||
-- delete article and context
|
-- delete comment and context
|
||||||
delete from "comment";
|
delete from "comment";
|
||||||
delete from article;
|
delete from article;
|
||||||
delete from citizen;
|
delete from citizen;
|
||||||
|
|||||||
@@ -38,13 +38,16 @@ begin
|
|||||||
_citizen_id2 := created_citizen2->>'id';
|
_citizen_id2 := created_citizen2->>'id';
|
||||||
|
|
||||||
|
|
||||||
|
perform follow('citizen'::regclass, _citizen_id, _citizen_id2);
|
||||||
|
assert (select count(*) > 0 from follow), 'follow must be inserted';
|
||||||
|
|
||||||
perform follow('citizen'::regclass, _citizen_id, _citizen_id2);
|
perform follow('citizen'::regclass, _citizen_id, _citizen_id2);
|
||||||
assert (select count(*) > 0 from follow), 'follow must be inserted';
|
assert (select count(*) > 0 from follow), 'follow must be inserted';
|
||||||
|
|
||||||
perform unfollow('citizen'::regclass, _citizen_id, _citizen_id2);
|
perform unfollow('citizen'::regclass, _citizen_id, _citizen_id2);
|
||||||
assert (select count(*) = 0 from follow), 'follow must be deleted after unfollow';
|
assert (select count(*) = 0 from follow), 'follow must be deleted after unfollow';
|
||||||
|
|
||||||
-- delete article and context
|
-- delete follow and context
|
||||||
delete from citizen;
|
delete from citizen;
|
||||||
delete from "user";
|
delete from "user";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user