diff --git a/set_version.sh b/set_version.sh index 06240d74..7b9e9d62 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.3-alpha.12 +export version=0.5.3-alpha.13 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index d3832d92..c92b370f 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -236,6 +236,30 @@ impl Server { .collect::>()) } + pub async fn fetch_members_with_ids(id: &str, ids: &Vec) -> Result> { + Ok(get_collection("server_members") + .find( + doc! { + "_id.server": id, + "_id.user": { + "$in": ids + } + }, + None, + ) + .await + .map_err(|_| Error::DatabaseError { + operation: "find", + with: "server_members", + })? + .filter_map(async move |s| s.ok()) + .collect::>() + .await + .into_iter() + .filter_map(|x| from_document(x).ok()) + .collect::>()) + } + pub async fn fetch_member_ids(id: &str) -> Result> { Ok(get_collection("server_members") .find( diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 060d4af9..1841de36 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -218,7 +218,7 @@ impl User { /// Utility function for fetching multiple users from the perspective of one. /// Assumes user has a mutual connection with others. - pub async fn fetch_multiple_users(&self, user_ids: Vec) -> Result> { + pub async fn fetch_multiple_users(&self, user_ids: &Vec) -> Result> { let mut users = vec![]; let mut cursor = get_collection("users") .find( diff --git a/src/notifications/payload.rs b/src/notifications/payload.rs index afc7cbaa..4a5704aa 100644 --- a/src/notifications/payload.rs +++ b/src/notifications/payload.rs @@ -104,7 +104,7 @@ pub async fn generate_ready(mut user: User) -> Result { user_ids.remove(&user.id); let mut users = if user_ids.len() > 0 { - user.fetch_multiple_users(user_ids.into_iter().collect::>()) + user.fetch_multiple_users(&user_ids.into_iter().collect::>()) .await? } else { vec![] diff --git a/src/routes/channels/members_fetch.rs b/src/routes/channels/members_fetch.rs index 1eabd8d4..4e4bc0d6 100644 --- a/src/routes/channels/members_fetch.rs +++ b/src/routes/channels/members_fetch.rs @@ -16,7 +16,7 @@ pub async fn req(user: User, target: Ref) -> Result { } if let Channel::Group { recipients, .. } = target { - Ok(json!(user.fetch_multiple_users(recipients).await?)) + Ok(json!(user.fetch_multiple_users(&recipients).await?)) } else { Err(Error::InvalidOperation) } diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs index 485c2cf8..f9f83e2b 100644 --- a/src/routes/channels/message_query.rs +++ b/src/routes/channels/message_query.rs @@ -166,13 +166,13 @@ pub async fn req(user: User, target: Ref, options: Options) -> Result { ids.remove(&user.id); let user_ids = ids.into_iter().collect(); - let users = user.fetch_multiple_users(user_ids).await?; + let users = user.fetch_multiple_users(&user_ids).await?; if let Channel::TextChannel { server, .. } = target { Ok(json!({ "messages": messages, "users": users, - "members": Server::fetch_members(&server).await? + "members": Server::fetch_members_with_ids(&server, &user_ids).await? })) } else { Ok(json!({ diff --git a/src/routes/channels/message_search.rs b/src/routes/channels/message_search.rs index 231e523e..e0df6b68 100644 --- a/src/routes/channels/message_search.rs +++ b/src/routes/channels/message_search.rs @@ -108,10 +108,10 @@ pub async fn req(user: User, target: Ref, options: Json) -> Result doc! { - "_id": -1 + "_id": -1 as i32 }, Sort::Oldest => doc! { - "_id": 1 + "_id": 1 as i32 } } ) @@ -142,13 +142,13 @@ pub async fn req(user: User, target: Ref, options: Json) -> Result Result { Ok(json!({ "members": members, - "users": user.fetch_multiple_users(member_ids).await? + "users": user.fetch_multiple_users(&member_ids).await? })) } diff --git a/src/version.rs b/src/version.rs index 35f921e9..e3168e31 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.3-alpha.12"; +pub const VERSION: &str = "0.5.3-alpha.13";