mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-10-30 23:24:42 +00:00 
			
		
		
		
	Automatically update conversations membership based on group membership update
This commit is contained in:
		| @@ -314,8 +314,6 @@ pub fn send_request(r: &mut HttpRequestHandler) -> RequestResult { | ||||
|         following: true, | ||||
|     })?; | ||||
|  | ||||
|     // TODO : if the user has already the "member" level, gives him access to conversations | ||||
|  | ||||
|     // Send a notification, if required | ||||
|     if matches!(group.registration_level, GroupRegistrationLevel::MODERATED_REGISTRATION) { | ||||
|         notifications_helper::create_group_membership_notification(r.user_id_ref()?, None, | ||||
|   | ||||
| @@ -132,6 +132,13 @@ pub fn get_list_user(user_id: &UserID) -> ResultBoxError<Vec<Conversation>> { | ||||
|         .exec(db_to_conversation_info) | ||||
| } | ||||
|  | ||||
| /// Get the list of conversations of a group | ||||
| pub fn get_list_group(group_id: &GroupID) -> Res<Vec<Conversation>> { | ||||
|     database::QueryInfo::new(CONV_LIST_TABLE) | ||||
|         .cond_group_id("group_id", group_id) | ||||
|         .exec(db_to_conversation_info) | ||||
| } | ||||
|  | ||||
| /// Get information about a single conversation | ||||
| pub fn get_single(conv_id: ConvID) -> ResultBoxError<Conversation> { | ||||
|     // Tables | ||||
| @@ -469,6 +476,15 @@ pub fn remove_user_from_conversation(user_id: &UserID, conv: &Conversation, remo | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Update members list for all the conversations of a given group | ||||
| pub fn update_members_list_for_group_conversations(group_id: &GroupID) -> Res { | ||||
|     for conv in get_list_group(group_id)? { | ||||
|         update_members_list_for_group_conversation(conv.id)?; | ||||
|     } | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Update the list of members for a group conversation | ||||
| pub fn update_members_list_for_group_conversation(conv_id: ConvID) -> Res { | ||||
|     let conv = get_single(conv_id)?; | ||||
| @@ -537,6 +553,15 @@ pub fn delete_conversation(conv: &Conversation) -> ResultBoxError<()> { | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Delete all the conversations of a group | ||||
| pub fn delete_all_group_conversations(group_id: &GroupID) -> Res { | ||||
|     for conv in get_list_group(group_id)? { | ||||
|         delete_conversation(&conv)?; | ||||
|     } | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Delete a conversation membership | ||||
| pub fn remove_member(user_id: &UserID, conv_id: ConvID, remover: Option<&UserID>) -> ResultBoxError<()> { | ||||
|     for msg in get_user_messages_for_conversations(conv_id, user_id)? { | ||||
|   | ||||
| @@ -9,7 +9,7 @@ use crate::data::group_id::GroupID; | ||||
| use crate::data::group_member::{GroupMember, GroupMembershipLevel}; | ||||
| use crate::data::new_group::NewGroup; | ||||
| use crate::data::user::UserID; | ||||
| use crate::helpers::{database, likes_helper, notifications_helper, posts_helper}; | ||||
| use crate::helpers::{database, likes_helper, notifications_helper, posts_helper, conversations_helper}; | ||||
| use crate::helpers::likes_helper::LikeType; | ||||
| use crate::utils::date_utils::time; | ||||
|  | ||||
| @@ -123,7 +123,13 @@ pub fn insert_member(m: &GroupMember) -> ResultBoxError<()> { | ||||
|         .add_user_id("user_id", &m.user_id) | ||||
|         .add_u64("time_create", m.time_create) | ||||
|         .add_u32("level", m.level.to_db()) | ||||
|         .insert_drop_result() | ||||
|         .insert_drop_result()?; | ||||
|  | ||||
|     if m.level.is_at_least_member() { | ||||
|         conversations_helper::update_members_list_for_group_conversations(&m.group_id)?; | ||||
|     } | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Remove a user's membership | ||||
| @@ -131,9 +137,12 @@ pub fn delete_member(group_id: &GroupID, user_id: &UserID) -> ResultBoxError { | ||||
|     database::DeleteQuery::new(GROUPS_MEMBERS_TABLE) | ||||
|         .cond_group_id("groups_id", group_id) | ||||
|         .cond_user_id("user_id", user_id) | ||||
|         .exec() | ||||
|         .exec()?; | ||||
|  | ||||
|     // TODO : Update access to group's conversations | ||||
|     // Update access to group's conversations | ||||
|     conversations_helper::update_members_list_for_group_conversations(&group_id)?; | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Update a user's membership level | ||||
| @@ -142,9 +151,12 @@ pub fn update_membership_level(group_id: &GroupID, user_id: &UserID, new_level: | ||||
|         .cond_user_id("user_id", user_id) | ||||
|         .cond_group_id("groups_id", group_id) | ||||
|         .set_u32("level", new_level.to_db()) | ||||
|         .exec() | ||||
|         .exec()?; | ||||
|  | ||||
|     // TODO : Update access to group's conversations | ||||
|     // Update access to group's conversations | ||||
|     conversations_helper::update_members_list_for_group_conversations(&group_id)?; | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Update following status of a user | ||||
| @@ -491,7 +503,8 @@ pub fn delete(group_id: &GroupID) -> ResultBoxError { | ||||
|     // Delete all group related notifications | ||||
|     notifications_helper::delete_all_related_with_group(group_id)?; | ||||
|  | ||||
|     // TODO : delete all conversations related with the group | ||||
|     // Delete all conversations related with the group | ||||
|     conversations_helper::delete_all_group_conversations(group_id)?; | ||||
|  | ||||
|     // Delete all group members | ||||
|     database::DeleteQuery::new(GROUPS_MEMBERS_TABLE) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user