Add query for get all versions of one article
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
create or replace function find_articles_versions_by_id(in _id uuid, out resource json) language plpgsql as
|
||||
$$
|
||||
declare
|
||||
_version_id uuid = (select version_id from article where id = _id);
|
||||
begin
|
||||
select find_articles_versions_by_version_id(_version_id)
|
||||
into resource;
|
||||
end;
|
||||
$$;
|
||||
|
||||
-- drop function if exists find_articles_versions_by_id(uuid, out json);
|
||||
@@ -0,0 +1,17 @@
|
||||
create or replace function find_articles_versions_by_version_id(in _version_id uuid, out resource json) language plpgsql as
|
||||
$$
|
||||
begin
|
||||
select json_agg(t order by t.version_number desc)
|
||||
into resource
|
||||
from (
|
||||
select
|
||||
a.*,
|
||||
find_citizen_by_id(a.created_by_id) as created_by
|
||||
from article as a
|
||||
where a.version_id = _version_id
|
||||
order by a.version_number desc
|
||||
) as t;
|
||||
end;
|
||||
$$;
|
||||
|
||||
-- drop function if exists find_articles_versions_by_version_id(uuid, out json);
|
||||
@@ -24,10 +24,20 @@ begin
|
||||
select upsert_article(created_article) into created_article;
|
||||
assert created_article->>'version_id' is not null, 'version_id should not be null';
|
||||
assert (created_article->>'version_number')::int = 1, format('version_number must be equal to 1, %s instead', created_article->>'version_number');
|
||||
-- try tu create new version
|
||||
-- try to create new version
|
||||
select upsert_article(created_article) into created_article;
|
||||
assert (created_article->>'version_number')::int = 2, format('version_number must be equal to 2, %s instead', created_article->>'version_number');
|
||||
|
||||
-- get articles versions by version_id
|
||||
select find_articles_versions_by_version_id((created_article->>'version_id')::uuid) into selected_article;
|
||||
assert selected_article#>>'{0,title}' = 'Love the world', format('title must be "Love the world", %s', selected_article#>>'{0,title}');
|
||||
assert (selected_article#>>'{0,version_number}')::int = 2, format('version_id must be 2, %s instead', selected_article#>>'{0,version_number}');
|
||||
|
||||
-- get articles versions by id
|
||||
select find_articles_versions_by_id((created_article->>'id')::uuid) into selected_article;
|
||||
assert selected_article#>>'{0,title}' = 'Love the world', format('title must be "Love the world", %s', selected_article#>>'{0,title}');
|
||||
assert (selected_article#>>'{0,version_number}')::int = 2, format('version_id must be 2, %s instead', selected_article#>>'{0,version_number}');
|
||||
|
||||
-- get article by id and check the title
|
||||
select find_article_by_id((created_article->>'id')::uuid) into selected_article;
|
||||
assert selected_article->>'title' = 'Love the world', format('title must be "Love the world", %s', selected_article->>'title');
|
||||
|
||||
Reference in New Issue
Block a user