Add query for get all versions of one article

This commit is contained in:
2019-09-05 16:37:15 +02:00
parent 369967d5f3
commit 3533eb4a5c
3 changed files with 39 additions and 1 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -24,10 +24,20 @@ begin
select upsert_article(created_article) into created_article; 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_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'); 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; 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'); 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 -- get article by id and check the title
select find_article_by_id((created_article->>'id')::uuid) into selected_article; 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'); assert selected_article->>'title' = 'Love the world', format('title must be "Love the world", %s', selected_article->>'title');