Display mutual connections when fetching user.

This commit is contained in:
Paul Makles
2020-04-10 15:35:00 +01:00
parent d0c8358bc8
commit 95aad8092b
3 changed files with 88 additions and 9 deletions

View File

@@ -1,17 +1,91 @@
use super::get_collection;
use bson::doc;
use mongodb::options::FindOneOptions;
use mongodb::options::{FindOptions, FindOneOptions};
/*pub struct MutualGuild {
pub fn find_mutual_guilds(user_id: &str, target_id: &str) -> Vec<String> {
let col = get_collection("guilds");
if let Ok(result) = col.find(
doc! {
"$and": [
{ "members": { "$elemMatch": { "id": user_id } } },
{ "members": { "$elemMatch": { "id": target_id } } },
]
},
FindOptions::builder()
.projection(doc! { "_id": 1 })
.build(),
) {
let mut results = vec![];
for doc in result {
if let Ok(guild) = doc {
results.push(guild.get_str("_id").unwrap().to_string());
}
}
results
} else {
vec![]
}
}
pub fn find_mutual_guilds(user_id: String, target_id: String) -> Vec<> {
pub fn find_mutual_friends(user_id: &str, target_id: &str) -> Vec<String> {
let col = get_collection("users");
if let Ok(result) = col.find(
doc! {
"$and": [
{ "relations": { "$elemMatch": { "id": user_id, "status": 0 } } },
{ "relations": { "$elemMatch": { "id": target_id, "status": 0 } } },
]
},
FindOptions::builder()
.projection(doc! { "_id": 1 })
.build(),
) {
let mut results = vec![];
}*/
for doc in result {
if let Ok(user) = doc {
results.push(user.get_str("_id").unwrap().to_string());
}
}
pub fn has_mutual_connection(user_id: String, target_id: String) -> bool {
results
} else {
vec![]
}
}
pub fn find_mutual_groups(user_id: &str, target_id: &str) -> Vec<String> {
let col = get_collection("channels");
if let Ok(result) = col.find(
doc! {
"type": 1,
"$and": [
{ "recipients": user_id },
{ "recipients": target_id },
]
},
FindOptions::builder()
.projection(doc! { "_id": 1 })
.build(),
) {
let mut results = vec![];
for doc in result {
if let Ok(group) = doc {
results.push(group.get_str("_id").unwrap().to_string());
}
}
results
} else {
vec![]
}
}
pub fn has_mutual_connection(user_id: &str, target_id: &str) -> bool {
let col = get_collection("guilds");
if let Ok(result) = col.find_one(
doc! {
@@ -21,7 +95,7 @@ pub fn has_mutual_connection(user_id: String, target_id: String) -> bool {
]
},
FindOneOptions::builder()
.projection(doc! { "_id": 1 })
.projection(doc! { "_id": 1 }) // ? TODO: fetch permissions
.build(),
) {
if result.is_some() {

View File

@@ -173,7 +173,7 @@ impl PermissionCalculator {
|| relationship == Relationship::BlockedOther
{
permissions = 1;
} else if has_mutual_connection(self.user.id, other_user.to_string()) {
} else if has_mutual_connection(&self.user.id, other_user) {
permissions = 177;
}
}