//! # Conversations controller //! //! @author Pierre Hubert use crate::data::http_request_handler::HttpRequestHandler; use crate::controllers::routes::RequestResult; use crate::helpers::{user_helper, conversations_helper}; use crate::data::new_conversation::NewConversation; use crate::api_data::res_create_conversation::ResCreateConversation; use crate::api_data::conversation_api::ConversationAPI; /// Create a new conversation pub fn create(r: &mut HttpRequestHandler) -> RequestResult { let name = r.post_string("name")?; let mut members = r.post_numbers_list("users", 1)?; // Adapt name let name = match name.as_str() { "false" => None, s => Some(s.to_string()) }; // Check if members exists for user in &members { if !user_helper::exists(user.clone())? { r.not_found(format!("User {} not found!", user))?; } } // Add current user ID if required let curr_user_id = r.user_id()? as i64; if !members.contains(&curr_user_id) { members.push(curr_user_id); } let conv = NewConversation { owner_id: r.user_id()?, name, owner_following: r.post_bool("follow")?, members, can_everyone_add_members: r.post_bool_opt("canEveryoneAddMembers", true), }; // Create the conversation let conv_id = conversations_helper::create(&conv)?; r.set_response(ResCreateConversation::new(conv_id)) } /// Get the list of conversations of a user pub fn get_list(r: &mut HttpRequestHandler) -> RequestResult { let list = conversations_helper::get_list_user(r.user_id()?)?; r.set_response(list.iter().map(|c| ConversationAPI::new(c)).collect::>()) } /// Get information about a single conversation pub fn get_single(r: &mut HttpRequestHandler) -> RequestResult { let conversation_id = r.post_conv_id("conversationID")?; let conv = conversations_helper::get_single(conversation_id, r.user_id()?)?; r.set_response(ConversationAPI::new(&conv)) }