Servers: Add route for creating channels.

Notifications: Subscribe to guild channels.
This commit is contained in:
Paul
2021-06-02 11:51:58 +01:00
parent f32f447233
commit 1713ad057d
8 changed files with 179 additions and 45 deletions

View File

@@ -1,9 +1,11 @@
use crate::database::*;
use crate::util::result::Error;
use super::hive::get_hive;
use futures::StreamExt;
use hive_pubsub::PubSub;
use mongodb::bson::doc;
use mongodb::bson::Document;
use mongodb::options::FindOptions;
pub async fn generate_subscriptions(user: &User) -> Result<(), String> {
@@ -16,6 +18,44 @@ pub async fn generate_subscriptions(user: &User) -> Result<(), String> {
}
}
let server_ids = user
.fetch_server_ids()
.await
.map_err(|_| "Failed to fetch memberships.".to_string())?;
let channel_ids = get_collection("servers")
.find(
doc! {
"_id": {
"$in": &server_ids
}
},
None,
)
.await
.map_err(|_| "Failed to fetch servers.".to_string())?
.filter_map(async move |s| s.ok())
.collect::<Vec<Document>>()
.await
.into_iter()
.filter_map(|x| {
x.get_array("channels").ok().map(|v| {
v.into_iter()
.filter_map(|x| x.as_str().map(|x| x.to_string()))
.collect::<Vec<String>>()
})
})
.flatten()
.collect::<Vec<String>>();
for id in server_ids {
hive.subscribe(user.id.clone(), id)?;
}
for id in channel_ids {
hive.subscribe(user.id.clone(), id)?;
}
let mut cursor = get_collection("channels")
.find(
doc! {
@@ -45,14 +85,5 @@ pub async fn generate_subscriptions(user: &User) -> Result<(), String> {
}
}
let server_ids = user
.fetch_server_ids()
.await
.map_err(|_| "Failed to fetch memberships.".to_string())?;
for id in server_ids {
hive.subscribe(user.id.clone(), id)?;
}
Ok(())
}