From 444cad6e093b172b603ab7b9ac3e378dfbdec88b Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Thu, 25 Jun 2020 09:26:58 +0200 Subject: [PATCH] Can get information about multiple groups --- src/controllers/groups_controller.rs | 27 ++++++++++++++++++++++++++- src/controllers/routes.rs | 2 ++ src/data/new_conversation.rs | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/controllers/groups_controller.rs b/src/controllers/groups_controller.rs index f85ec20..4d4583e 100644 --- a/src/controllers/groups_controller.rs +++ b/src/controllers/groups_controller.rs @@ -2,13 +2,16 @@ //! //! @author Pierre Hubert +use std::collections::HashMap; + +use crate::api_data::group_api::GroupApi; use crate::api_data::res_create_group::GroupCreationResult; use crate::controllers::routes::RequestResult; use crate::data::group::GroupAccessLevel; +use crate::data::group_id::GroupID; use crate::data::http_request_handler::HttpRequestHandler; use crate::data::new_group::NewGroup; use crate::helpers::groups_helper; -use crate::api_data::group_api::GroupApi; /// Create a new group pub fn create(r: &mut HttpRequestHandler) -> RequestResult { @@ -38,4 +41,26 @@ pub fn get_info_single(r: &mut HttpRequestHandler) -> RequestResult { let group = groups_helper::get_info(&group_id)?; r.set_response(GroupApi::new(&group, r.user_id_opt())?) +} + +/// Get information about multiple users +pub fn get_info_multiple(r: &mut HttpRequestHandler) -> RequestResult { + let groups_id = r.post_numbers_list("list", 1)?; + + let mut list = HashMap::new(); + + for id in groups_id { + let id = GroupID::new(id as u64); + + if !groups_helper::exists(&id)? || + groups_helper::get_access_level(&id, r.user_id_opt())? < GroupAccessLevel::LIMITED_ACCESS { + r.not_found(format!("Group {} not found!", id.id()))?; + } + + let group = groups_helper::get_info(&id)?; + + list.insert(id.id().to_string(), GroupApi::new(&group, r.user_id_opt())?); + } + + r.set_response(list) } \ No newline at end of file diff --git a/src/controllers/routes.rs b/src/controllers/routes.rs index c77403e..0a8b493 100644 --- a/src/controllers/routes.rs +++ b/src/controllers/routes.rs @@ -134,6 +134,8 @@ pub fn get_routes() -> Vec { Route::post("/groups/get_info", Box::new(groups_controller::get_info_single)), + Route::post("/groups/get_multiple_info", Box::new(groups_controller::get_info_multiple)), + // Virtual directory controller Route::post("/user/findbyfolder", Box::new(virtual_directory_controller::find_user)), diff --git a/src/data/new_conversation.rs b/src/data/new_conversation.rs index 7028742..96e2fce 100644 --- a/src/data/new_conversation.rs +++ b/src/data/new_conversation.rs @@ -9,6 +9,6 @@ pub struct NewConversation { pub owner_id: UserID, pub name: Option, pub owner_following: bool, - pub members: Vec, + pub members: Vec, pub can_everyone_add_members: bool } \ No newline at end of file