diff --git a/src/routes/users/find_mutual.rs b/src/routes/users/find_mutual.rs index 42af6847..5cb3ae09 100644 --- a/src/routes/users/find_mutual.rs +++ b/src/routes/users/find_mutual.rs @@ -29,6 +29,34 @@ pub async fn req(user: User, target: Ref) -> Result { .into_iter() .filter_map(|x| x.get_str("_id").ok().map(|x| x.to_string())) .collect::>(); + + let server_ids = User::fetch_server_ids(&user.id).await?; + let servers = get_collection("server_members") + .find( + doc! { + "_id.user": &target.id, + "_id.server": { + "$in": server_ids + } + }, + None + ) + .await + .map_err(|_| Error::DatabaseError { + operation: "find_one", + with: "server_members", + })? + .filter_map(async move |s| s.ok()) + .collect::>() + .await + .into_iter() + .filter_map(|x| { + x.get_document("_id") + .ok() + .map(|i| i.get_str("server").ok().map(|x| x.to_string())) + }) + .flatten() + .collect::>(); - Ok(json!({ "users": users })) + Ok(json!({ "users": users, "servers": servers })) }