Skip to content
Snippets Groups Projects
Commit 0d3ef9a3 authored by insert's avatar insert
Browse files

Refractor WS; remove - fom names.

parent 4f9029f7
No related merge requests found
Pipeline #444 passed with stage
in 2 minutes and 18 seconds
use crate::database::get_collection;
use crate::database::guards::reference::Ref;
use crate::{
database::get_collection,
notifications::events::ClientboundNotification,
util::result::{Error, Result},
};
use futures::StreamExt;
use mongodb::{
bson::{doc, from_bson, Bson},
options::FindOptions,
};
use mongodb::bson::{doc, from_bson, Bson};
use rauth::auth::Session;
use rocket::http::Status;
use rocket::request::{self, FromRequest, Outcome, Request};
......@@ -81,57 +73,4 @@ impl User {
id: self.id.to_string(),
}
}
pub async fn generate_ready_payload(self) -> Result<ClientboundNotification> {
let mut users = vec![];
if let Some(relationships) = &self.relations {
let user_ids: Vec<String> = relationships
.iter()
.map(|relationship| relationship.id.clone())
.collect();
let mut cursor = get_collection("users")
.find(
doc! {
"_id": {
"$in": user_ids
}
},
FindOptions::builder()
.projection(doc! { "_id": 1, "username": 1 })
.build(),
)
.await
.map_err(|_| Error::DatabaseError {
operation: "find",
with: "users",
})?;
while let Some(result) = cursor.next().await {
if let Ok(doc) = result {
let mut user: User =
from_bson(Bson::Document(doc)).map_err(|_| Error::DatabaseError {
operation: "from_bson",
with: "user",
})?;
user.relationship = Some(
relationships
.iter()
.find(|x| user.id == x.id)
.ok_or_else(|| Error::InternalError)?
.status
.clone(),
);
users.push(user);
}
}
}
users.push(self);
Ok(ClientboundNotification::Ready { users })
}
}
pub mod events;
pub mod hive;
pub mod payload;
pub mod subscriptions;
pub mod websocket;
use crate::notifications::events::ClientboundNotification;
use crate::{
database::{entities::User, get_collection},
util::result::{Error, Result},
};
use futures::StreamExt;
use mongodb::{
bson::{doc, from_bson, Bson},
options::FindOptions,
};
pub async fn generate_ready(user: User) -> Result<ClientboundNotification> {
let mut users = vec![];
if let Some(relationships) = &user.relations {
let user_ids: Vec<String> = relationships
.iter()
.map(|relationship| relationship.id.clone())
.collect();
let mut cursor = get_collection("users")
.find(
doc! {
"_id": {
"$in": user_ids
}
},
FindOptions::builder()
.projection(doc! { "_id": 1, "username": 1 })
.build(),
)
.await
.map_err(|_| Error::DatabaseError {
operation: "find",
with: "users",
})?;
while let Some(result) = cursor.next().await {
if let Ok(doc) = result {
let mut user: User =
from_bson(Bson::Document(doc)).map_err(|_| Error::DatabaseError {
operation: "from_bson",
with: "user",
})?;
user.relationship = Some(
relationships
.iter()
.find(|x| user.id == x.id)
.ok_or_else(|| Error::InternalError)?
.status
.clone(),
);
users.push(user);
}
}
}
users.push(user);
Ok(ClientboundNotification::Ready { users })
}
......@@ -97,8 +97,9 @@ async fn accept(stream: TcpStream) {
) {
send(ClientboundNotification::Authenticated);
match task::block_on(user.generate_ready_payload())
{
match task::block_on(
super::payload::generate_ready(user),
) {
Ok(payload) => {
send(payload);
}
......
......@@ -10,7 +10,7 @@ use serde::{Deserialize, Serialize};
use validator::Validate;
lazy_static! {
static ref RE_USERNAME: Regex = Regex::new(r"^[a-zA-Z0-9-_]+$").unwrap();
static ref RE_USERNAME: Regex = Regex::new(r"^[a-zA-Z0-9_]+$").unwrap();
}
#[derive(Validate, Serialize, Deserialize)]
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment