User status / profile change route, username change route.

This commit is contained in:
Paul
2021-04-03 14:41:40 +01:00
parent 78c42fd412
commit 9492e145f9
10 changed files with 141 additions and 26 deletions

View File

@@ -0,0 +1,41 @@
use crate::database::*;
use crate::util::result::{Error, Result};
use crate::notifications::events::ClientboundNotification;
use mongodb::bson::{doc, to_document};
use validator::Validate;
use rocket_contrib::json::Json;
use serde::{Serialize, Deserialize};
#[derive(Validate, Serialize, Deserialize)]
pub struct Data {
#[serde(skip_serializing_if = "Option::is_none")]
status: Option<UserStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
profile: Option<UserProfile>
}
#[patch("/", data = "<data>")]
pub async fn req(user: User, data: Json<Data>) -> Result<()> {
data.validate()
.map_err(|error| Error::FailedValidation { error })?;
get_collection("users")
.update_one(
doc! { "_id": &user.id },
doc! { "$set": to_document(&data.0).map_err(|_| Error::DatabaseError { operation: "to_document", with: "data" })? },
None
)
.await
.map_err(|_| Error::DatabaseError { operation: "update_one", with: "user" })?;
ClientboundNotification::UserUpdate {
id: user.id.clone(),
data: json!(data.0)
}
.publish(user.id.clone())
.await
.ok();
Ok(())
}