diff --git a/src/main/resources/sql/functions/article/find_articles_versions_by_id.sql b/src/main/resources/sql/functions/article/find_articles_versions_by_id.sql new file mode 100644 index 0000000..b5f28f3 --- /dev/null +++ b/src/main/resources/sql/functions/article/find_articles_versions_by_id.sql @@ -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); diff --git a/src/main/resources/sql/functions/article/find_articles_versions_by_version_id.sql b/src/main/resources/sql/functions/article/find_articles_versions_by_version_id.sql new file mode 100644 index 0000000..0f6bdfc --- /dev/null +++ b/src/main/resources/sql/functions/article/find_articles_versions_by_version_id.sql @@ -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); diff --git a/src/test/sql/article.sql b/src/test/sql/article.sql index ac7033a..81f6e33 100644 --- a/src/test/sql/article.sql +++ b/src/test/sql/article.sql @@ -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');