From 678a2f48d24f89bd054107b8778c739c0eacc86b Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Tue, 12 May 2020 01:26:22 +0200 Subject: [PATCH] #48 Can view workgroup of citizen --- .../kotlin/fr/dcproject/entity/Citizen.kt | 4 +++- .../functions/citizen/find_citizen_by_id.sql | 8 +++++--- .../citizen/find_citizen_by_id_with_user.sql | 5 ++++- .../workgroup/find_workgroup_by_id_simple.sql | 20 +++++++++++++++++++ src/test/sql/workgroup.sql | 3 +++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/sql/functions/workgroup/find_workgroup_by_id_simple.sql diff --git a/src/main/kotlin/fr/dcproject/entity/Citizen.kt b/src/main/kotlin/fr/dcproject/entity/Citizen.kt index 460a5c0..9dbd75d 100644 --- a/src/main/kotlin/fr/dcproject/entity/Citizen.kt +++ b/src/main/kotlin/fr/dcproject/entity/Citizen.kt @@ -20,7 +20,9 @@ class Citizen( override val user: User ) : CitizenFull, CitizenBasic(id, name, email, birthday, voteAnonymous, followAnonymous, user), - EntityCreatedAt by EntityCreatedAtImp() + EntityCreatedAt by EntityCreatedAtImp() { + var workgroups: List> = emptyList() +} open class CitizenBasic( id: UUID = UUID.randomUUID(), diff --git a/src/main/resources/sql/functions/citizen/find_citizen_by_id.sql b/src/main/resources/sql/functions/citizen/find_citizen_by_id.sql index d45896b..b9d32b2 100644 --- a/src/main/resources/sql/functions/citizen/find_citizen_by_id.sql +++ b/src/main/resources/sql/functions/citizen/find_citizen_by_id.sql @@ -5,12 +5,14 @@ declare begin select to_json(t) into resource from ( - select + select z.*, - find_user_by_id(z.user_id) as "user" + find_user_by_id(z.user_id) as "user", + array_agg(find_workgroup_by_id_simple(ciw.workgroup_id)) as "workgroups" from citizen as z + left join citizen_in_workgroup ciw on z.id = ciw.citizen_id where z.id = _id + group by z.id ) as t; end; $$; - diff --git a/src/main/resources/sql/functions/citizen/find_citizen_by_id_with_user.sql b/src/main/resources/sql/functions/citizen/find_citizen_by_id_with_user.sql index 2bd3d32..bda4232 100644 --- a/src/main/resources/sql/functions/citizen/find_citizen_by_id_with_user.sql +++ b/src/main/resources/sql/functions/citizen/find_citizen_by_id_with_user.sql @@ -7,9 +7,12 @@ begin from ( select z.*, - find_user_by_id(z.user_id) as "user" + find_user_by_id(z.user_id) as "user", + array_agg(find_workgroup_by_id_simple(ciw.workgroup_id)) as "workgroups" from citizen as z + left join citizen_in_workgroup ciw on z.id = ciw.citizen_id where z.id = _id + group by z.id ) as t; end; $$; diff --git a/src/main/resources/sql/functions/workgroup/find_workgroup_by_id_simple.sql b/src/main/resources/sql/functions/workgroup/find_workgroup_by_id_simple.sql new file mode 100644 index 0000000..4187a4c --- /dev/null +++ b/src/main/resources/sql/functions/workgroup/find_workgroup_by_id_simple.sql @@ -0,0 +1,20 @@ +create or replace function find_workgroup_by_id_simple(in id uuid, out resource json) language plpgsql as +$$ +declare + _id alias for id; +begin + select to_json(t) + from ( + select + w.*, + json_build_object('id', w.created_by_id) as created_by, + json_build_object('id', w.owner_id) as owner + into resource + from workgroup as w + join citizen_in_workgroup ciw on w.id = ciw.workgroup_id + where w.id = _id + and deleted_at is null + group by w.id + ) as t; +end; +$$; diff --git a/src/test/sql/workgroup.sql b/src/test/sql/workgroup.sql index 406fe02..1c4e17b 100644 --- a/src/test/sql/workgroup.sql +++ b/src/test/sql/workgroup.sql @@ -55,6 +55,9 @@ begin assert members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id3)), 'Members must contain citizen3'; + -- Check if "find_citizen_by_id" retrun workgroups of citizen + assert (select find_citizen_by_id(_citizen_id2)#>>'{workgroups, 0, id}') = (created_workgroup->>'id'), 'find_citizen_by_id must return workgroups'; + -- update select m into members from update_workgroup_members((created_workgroup->>'id')::uuid, json_build_array( json_build_object('id', _citizen_id2),