From 42781565dd1f58a3b848a6beffe5a2b2c5ab45be Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Sat, 8 Feb 2020 02:28:19 +0100 Subject: [PATCH] fix find_citizen_opinions_by_target_ids.sql change opinion_list.target to array --- src/main/resources/sql/fixtures/09-opinion.sql | 2 +- .../find_citizen_opinions_by_target_ids.sql | 18 ++++++++++++++---- .../sql/migrations/0000-init_schema.up.sql | 4 ++-- src/test/sql/opinion.sql | 12 ++++-------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/resources/sql/fixtures/09-opinion.sql b/src/main/resources/sql/fixtures/09-opinion.sql index 6b7278a..2b7170a 100644 --- a/src/main/resources/sql/fixtures/09-opinion.sql +++ b/src/main/resources/sql/fixtures/09-opinion.sql @@ -8,7 +8,7 @@ begin delete from opinion_list; insert into opinion_list (id, name, target) - select uuid_in(md5('opinion_list'||row_number() over ())::cstring), 'Opinion'||row_number() over (), 'article' + select uuid_in(md5('opinion_list'||row_number() over ())::cstring), 'Opinion'||row_number() over (), '{article}' from generate_series(0,20); for i in 0..9 loop diff --git a/src/main/resources/sql/functions/opinion/find_citizen_opinions_by_target_ids.sql b/src/main/resources/sql/functions/opinion/find_citizen_opinions_by_target_ids.sql index 48e28ba..4d3b7fe 100644 --- a/src/main/resources/sql/functions/opinion/find_citizen_opinions_by_target_ids.sql +++ b/src/main/resources/sql/functions/opinion/find_citizen_opinions_by_target_ids.sql @@ -5,14 +5,24 @@ create or replace function find_citizen_opinions_by_target_ids( ) language plpgsql as $$ begin + select json_agg(t) into resource + from ( select - jsonb_agg(find_citizen_opinions_by_target_id(_citizen_id, o)) into resource - from unnest(_ids) o + o.*, + ol.name + from opinion as o + join opinion_list ol on o.opinion = ol.id + + where target_id = any(_ids) + and created_by_id = _citizen_id order by - _ids - limit 100; + ol.name + limit 100 + ) t; end; $$; -- drop function if exists find_citizen_votes_by_target_ids(uuid, uuid[], regclass); + +-- select * from find_citizen_opinions_by_target_ids('045b6e9e-5a9e-d9b0-75d4-e51f0bc6cd21', '{32a18b25-507d-49d8-5168-7675fb6a7b8c, 429bfd8c-ebc2-09ac-227f-28bcdaa91d84, 550f4543-35a3-9910-e493-70d26b931473}') \ No newline at end of file diff --git a/src/main/resources/sql/migrations/0000-init_schema.up.sql b/src/main/resources/sql/migrations/0000-init_schema.up.sql index 6020c8e..9552d33 100644 --- a/src/main/resources/sql/migrations/0000-init_schema.up.sql +++ b/src/main/resources/sql/migrations/0000-init_schema.up.sql @@ -506,8 +506,8 @@ create table resource_view create table opinion_list ( id uuid default uuid_generate_v4() not null primary key, - name text not null, - target text null, + name text not null unique, + target text[] null, created_at timestamptz default now() not null, deleted_at timestamptz null ); diff --git a/src/test/sql/opinion.sql b/src/test/sql/opinion.sql index 78a44de..2f80c01 100644 --- a/src/test/sql/opinion.sql +++ b/src/test/sql/opinion.sql @@ -59,13 +59,13 @@ begin insert into opinion_list(id, name, target) - values (opinion1, 'Opinion1', (created_article->>'id')::uuid); + values (opinion1, 'Opinion1', '{article}'); insert into opinion_list(id, name, target) - values (opinion2, 'Opinion2', (created_article->>'id')::uuid); + values (opinion2, 'Opinion2', '{article}'); insert into opinion_list(name, target) - values ('Opinion3', (created_article->>'id')::uuid); + values ('Opinion3', '{article}'); perform opinion( reference => 'article'::regclass, @@ -84,12 +84,8 @@ begin from find_citizen_opinions_by_target_id(_citizen_id, (created_article->>'id')::uuid) o), 'The opinion must have a name'; - raise notice '%', ( - select o - from find_citizen_opinions_by_target_ids(_citizen_id, array[(created_article->>'id')::uuid]) o); - assert( - select (o#>>'{0, 0, name}') = 'Opinion1' + select (o#>>'{0, name}') = 'Opinion1' from find_citizen_opinions_by_target_ids(_citizen_id, array[(created_article->>'id')::uuid]) o), 'The first opinion must have a name';