mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-12-28 14:38:52 +00:00
Can update the list of members of the conversation
This commit is contained in:
parent
16298d54fb
commit
856d22fed8
@ -71,18 +71,27 @@ pub fn update_settings(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
conversations_helper::set_following(
|
||||
r.user_id()?,
|
||||
conv_id,
|
||||
r.post_bool("following")?
|
||||
r.post_bool("following")?,
|
||||
)?;
|
||||
}
|
||||
|
||||
// Update members list
|
||||
if r.has_post_parameter("members") {
|
||||
let members = r.post_numbers_list("members", 1);
|
||||
let mut members = r.post_numbers_list("members", 1)?;
|
||||
let can_everyone_add_members = conversations_helper::can_everyone_add_members(conv_id)?;
|
||||
|
||||
if !is_moderator && !can_everyone_add_members {
|
||||
r.forbidden("You can not update the list of members of this conversation!".to_string())?;
|
||||
}
|
||||
|
||||
if !members.contains(&r.user_id()?) {
|
||||
members.push(r.user_id()?);
|
||||
}
|
||||
|
||||
conversations_helper::set_members(
|
||||
conv_id,
|
||||
&members,
|
||||
can_everyone_add_members)?;
|
||||
}
|
||||
|
||||
r.success("Conversation information successfully updated!")
|
||||
|
@ -49,6 +49,14 @@ pub fn add_member(conv_id: u64, user_id: UserID, following: bool) -> ResultBoxEr
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Remove a member from a conversation
|
||||
pub fn remove_member(conv_id: u64, user_id: UserID) -> ResultBoxError<()> {
|
||||
database::DeleteQuery::new(CONV_USERS_TABLE)
|
||||
.cond_u64("conv_id", conv_id)
|
||||
.cond_user_id("user_id", user_id)
|
||||
.exec()
|
||||
}
|
||||
|
||||
/// Get the list of conversations of a specific user
|
||||
pub fn get_list_user(user_id: UserID) -> ResultBoxError<Vec<Conversation>> {
|
||||
database::QueryInfo::new(CONV_LIST_TABLE)
|
||||
@ -132,6 +140,33 @@ pub fn set_following(user_id: UserID, conv_id: u64, following: bool) -> ResultBo
|
||||
.exec()
|
||||
}
|
||||
|
||||
/// Set a new list of members for a given conversation
|
||||
pub fn set_members(conv_id: u64, new_list: &Vec<UserID>, can_delete: bool) -> ResultBoxError<()> {
|
||||
let curr_list = get_list_members(conv_id)?;
|
||||
|
||||
// Add new members
|
||||
for member in new_list {
|
||||
if curr_list.contains(member) {
|
||||
continue;
|
||||
}
|
||||
|
||||
add_member(conv_id, member.clone(), true)?;
|
||||
}
|
||||
|
||||
if can_delete {
|
||||
for member in curr_list {
|
||||
if new_list.contains(&member) {
|
||||
continue;
|
||||
}
|
||||
|
||||
remove_member(conv_id, member)?;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Turn a database entry into a ConversationInfo object
|
||||
fn db_to_conversation_info(row: &database::RowResult) -> ResultBoxError<Conversation> {
|
||||
let conv_id = row.get_u64("id")?;
|
||||
|
@ -506,6 +506,21 @@ impl DeleteQuery {
|
||||
self.conditions.insert(key.to_string(), Value::from(value));
|
||||
self
|
||||
}
|
||||
|
||||
pub fn cond_u64(mut self, key: &str, value: u64) -> DeleteQuery {
|
||||
self.conditions.insert(key.to_string(), Value::from(value));
|
||||
self
|
||||
}
|
||||
|
||||
pub fn cond_user_id(mut self, key: &str, value: UserID) -> DeleteQuery {
|
||||
self.conditions.insert(key.to_string(), Value::from(value));
|
||||
self
|
||||
}
|
||||
|
||||
/// Execute the delete query
|
||||
pub fn exec(self) -> ResultBoxError<()> {
|
||||
delete(self)
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete an entry from the database
|
||||
|
Loading…
Reference in New Issue
Block a user