feature #7: add colum parents_ids into comment

This commit is contained in:
2019-08-26 02:38:58 +02:00
parent ce38aa6fe2
commit 0547cf5784
3 changed files with 74 additions and 4 deletions

View File

@@ -17,7 +17,7 @@ begin
values (_citizen_id, _target_id, _content, _parent_id) values (_citizen_id, _target_id, _content, _parent_id)
returning comment_on_constitution.id into _id; returning comment_on_constitution.id into _id;
else else
raise exception '% no implemented', reference::text; raise exception 'comment with target as "%", is no implemented', reference::text;
end if; end if;
end; end;
$$; $$;

View File

@@ -167,6 +167,7 @@ $$;
create trigger set_constitution_link_trigger create trigger set_constitution_link_trigger
before insert before insert
on article_in_title on article_in_title
for each row
execute procedure set_constitution_link(); execute procedure set_constitution_link();
create table article_relations create table article_relations
@@ -228,13 +229,41 @@ create table follow_citizen
create table comment create table comment
( (
updated_at timestamptz default now() not null check ( updated_at >= created_at ), updated_at timestamptz default now() not null check ( updated_at >= created_at ),
"content" text not null check ( content != '' and length(content) < 4096), "content" text not null check ( content != '' and length(content) < 4096),
parent_id uuid null references comment (id), parent_id uuid references comment (id),
parents_ids uuid[],
foreign key (citizen_id) references citizen (id), foreign key (citizen_id) references citizen (id),
primary key (id) primary key (id)
) inherits (extra); ) inherits (extra);
create index comment_parents_ids_idx
on comment (parents_ids);
create or replace function set_comment_parents_ids() returns trigger
language plpgsql as
$$
begin
if(new.parent_id is not null) then
new.parents_ids = (
select com.parents_ids || com.id
from "comment" com
where com.id = new.parent_id
);
else
new.parents_ids = null;
end if;
return new;
end;
$$;
create trigger set_comment_parents_ids_trigger
before insert
on comment
for each row
execute procedure set_comment_parents_ids();
create table comment_on_article create table comment_on_article
( (
target_reference regclass default 'article'::regclass not null, target_reference regclass default 'article'::regclass not null,
@@ -244,6 +273,15 @@ create table comment_on_article
primary key (id) primary key (id)
) inherits (comment); ) inherits (comment);
create index comment_on_article_parents_ids_idx
on comment_on_article (parents_ids);
create trigger set_comment_on_article_parents_ids_trigger
before insert
on comment_on_article
for each row
execute procedure set_comment_parents_ids();
create table comment_on_constitution create table comment_on_constitution
( (
target_reference regclass default 'constitution'::regclass not null, target_reference regclass default 'constitution'::regclass not null,
@@ -253,6 +291,15 @@ create table comment_on_constitution
primary key (id) primary key (id)
) inherits (comment); ) inherits (comment);
create index comment_on_constitution_parents_ids_idx
on comment_on_constitution (parents_ids);
create trigger set_comment_on_constitution_parents_ids_trigger
before insert
on comment_on_constitution
for each row
execute procedure set_comment_parents_ids();
create table vote create table vote

View File

@@ -26,6 +26,8 @@ declare
} }
$json$; $json$;
_comment_id uuid; _comment_id uuid;
_comment_id_response uuid;
_comment_id_response2 uuid;
_selected_comments json; _selected_comments json;
_selected_comments_total int; _selected_comments_total int;
begin begin
@@ -78,6 +80,27 @@ begin
from find_comments_constitution_by_citizen(_citizen_id); from find_comments_constitution_by_citizen(_citizen_id);
assert (_selected_comments_total = 0), 'the number of comments for this citizen must be 0, "' || _selected_comments_total || '" returned'; assert (_selected_comments_total = 0), 'the number of comments for this citizen must be 0, "' || _selected_comments_total || '" returned';
select "comment"(
reference => 'article'::regclass,
target_id => (created_article->>'id')::uuid,
citizen_id => _citizen_id,
content => 'No is not exist'::text,
_parent_id => _comment_id::uuid
) into _comment_id_response;
select "comment"(
reference => 'article'::regclass,
target_id => (created_article->>'id')::uuid,
citizen_id => _citizen_id,
content => 'No is not exist'::text,
_parent_id => _comment_id_response::uuid
) into _comment_id_response2;
assert (select count(*) = 3 from "comment"), 'comment must be inserted';
assert (select com.parents_ids @> ARRAY[_comment_id] from "comment" com where id = _comment_id_response), 'parents_ids not contain "' || _comment_id::text || '" ' || (select com.parents_ids::text[] from "comment" com where id = _comment_id_response);
assert (select com.parents_ids @> ARRAY[_comment_id_response] from "comment" com where id = _comment_id_response2), 'parents_ids not contain "' || _comment_id_response::text || '" ' || (select com.parents_ids::text[] from "comment" com where id = _comment_id_response2);
assert (select com.parents_ids @> ARRAY[_comment_id] from "comment" com where id = _comment_id_response2), 'parents_ids not contain "' || _comment_id::text || '" ' || (select com.parents_ids::text[] from "comment" com where id = _comment_id_response2);
-- delete comment and context -- delete comment and context
delete from "comment"; delete from "comment";
delete from article; delete from article;