From 5aa9624d5c7aa4e3342c5ae9feaf7c71f55f0f6b Mon Sep 17 00:00:00 2001 From: Paul <paulmakles@gmail.com> Date: Wed, 26 May 2021 11:02:16 +0100 Subject: [PATCH] Database: Add user settings sync entity. Run cargo fmt. --- src/database/entities/message.rs | 7 +-- .../entities/{ => microservice}/autumn.rs | 0 .../entities/{ => microservice}/january.rs | 0 src/database/entities/microservice/mod.rs | 2 + src/database/entities/mod.rs | 7 ++- src/database/entities/sync.rs | 3 ++ src/database/entities/user.rs | 8 +-- src/database/migrations/scripts.rs | 53 ++++++++++--------- src/routes/channels/edit_channel.rs | 9 +++- src/routes/channels/message_query.rs | 2 +- src/routes/channels/message_send.rs | 4 +- src/routes/root.rs | 5 +- src/util/result.rs | 8 ++- 13 files changed, 67 insertions(+), 41 deletions(-) rename src/database/entities/{ => microservice}/autumn.rs (100%) rename src/database/entities/{ => microservice}/january.rs (100%) create mode 100644 src/database/entities/microservice/mod.rs create mode 100644 src/database/entities/sync.rs diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 177c530..a5b6eb9 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -1,4 +1,4 @@ -use crate::util::variables::{VAPID_PRIVATE_KEY, USE_JANUARY}; +use crate::util::variables::{USE_JANUARY, VAPID_PRIVATE_KEY}; use crate::{ database::*, notifications::{events::ClientboundNotification, websocket::is_online}, @@ -297,12 +297,13 @@ impl Message { let channel = self.channel.clone(); ClientboundNotification::MessageDelete { id: self.id.clone(), - channel: self.channel.clone() + channel: self.channel.clone(), } .publish(channel); if let Some(attachments) = &self.attachments { - let attachment_ids: Vec<String> = attachments.iter().map(|f| f.id.to_string()).collect(); + let attachment_ids: Vec<String> = + attachments.iter().map(|f| f.id.to_string()).collect(); get_collection("attachments") .update_one( doc! { diff --git a/src/database/entities/autumn.rs b/src/database/entities/microservice/autumn.rs similarity index 100% rename from src/database/entities/autumn.rs rename to src/database/entities/microservice/autumn.rs diff --git a/src/database/entities/january.rs b/src/database/entities/microservice/january.rs similarity index 100% rename from src/database/entities/january.rs rename to src/database/entities/microservice/january.rs diff --git a/src/database/entities/microservice/mod.rs b/src/database/entities/microservice/mod.rs new file mode 100644 index 0000000..334ed6f --- /dev/null +++ b/src/database/entities/microservice/mod.rs @@ -0,0 +1,2 @@ +pub mod autumn; +pub mod january; \ No newline at end of file diff --git a/src/database/entities/mod.rs b/src/database/entities/mod.rs index d384f5d..358b2ea 100644 --- a/src/database/entities/mod.rs +++ b/src/database/entities/mod.rs @@ -1,9 +1,11 @@ -mod autumn; +mod microservice; mod channel; -mod january; mod message; mod server; mod user; +mod sync; + +use microservice::*; pub use autumn::*; pub use channel::*; @@ -11,3 +13,4 @@ pub use january::*; pub use message::*; pub use server::*; pub use user::*; +pub use sync::*; diff --git a/src/database/entities/sync.rs b/src/database/entities/sync.rs new file mode 100644 index 0000000..d905c69 --- /dev/null +++ b/src/database/entities/sync.rs @@ -0,0 +1,3 @@ +use std::collections::HashMap; + +pub type UserSettings = HashMap<String, (i64, String)>; diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 6648ad1..f9c1605 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -4,11 +4,11 @@ use mongodb::{ bson::{doc, from_document}, options::FindOptions, }; -use serde::{Deserialize, Serialize}; -use validator::Validate; use num_enum::TryFromPrimitive; -use ulid::Ulid; +use serde::{Deserialize, Serialize}; use std::ops; +use ulid::Ulid; +use validator::Validate; use crate::database::permissions::user::UserPermissions; use crate::database::*; @@ -65,7 +65,7 @@ pub enum Badges { Developer = 1, Translator = 2, Supporter = 4, - EarlyAdopter = 256 + EarlyAdopter = 256, } impl_op_ex_commutative!(+ |a: &i32, b: &Badges| -> i32 { *a | *b as i32 }); diff --git a/src/database/migrations/scripts.rs b/src/database/migrations/scripts.rs index e085959..8e28d7d 100644 --- a/src/database/migrations/scripts.rs +++ b/src/database/migrations/scripts.rs @@ -1,9 +1,12 @@ use crate::database::{get_collection, get_db}; -use log::info; use futures::StreamExt; +use log::info; +use mongodb::{ + bson::{doc, from_document}, + options::FindOptions, +}; use serde::{Deserialize, Serialize}; -use mongodb::{bson::{doc, from_document}, options::FindOptions}; #[derive(Serialize, Deserialize)] struct MigrationInfo { @@ -92,34 +95,36 @@ pub async fn run_migrations(revision: i32) -> i32 { info!("Running migration [revision 3 / 2021-05-25]: Support multiple file uploads, add channel_unreads and user_settings."); let messages = get_collection("messages"); - let mut cursor = messages.find( - doc! { - "attachment": { - "$exists": 1 - } - }, - FindOptions::builder() - .projection(doc! { - "_id": 1, - "attachments": [ "$attachment" ] - }) - .build() - ) - .await - .expect("Failed to fetch messages."); + let mut cursor = messages + .find( + doc! { + "attachment": { + "$exists": 1 + } + }, + FindOptions::builder() + .projection(doc! { + "_id": 1, + "attachments": [ "$attachment" ] + }) + .build(), + ) + .await + .expect("Failed to fetch messages."); while let Some(result) = cursor.next().await { let doc = result.unwrap(); let id = doc.get_str("_id").unwrap(); let attachments = doc.get_array("attachments").unwrap(); - messages.update_one( - doc! { "_id": id }, - doc! { "$unset": { "attachment": 1 }, "$set": { "attachments": attachments } }, - None - ) - .await - .unwrap(); + messages + .update_one( + doc! { "_id": id }, + doc! { "$unset": { "attachment": 1 }, "$set": { "attachments": attachments } }, + None, + ) + .await + .unwrap(); } get_db() diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs index d032377..5b2fbd2 100644 --- a/src/routes/channels/edit_channel.rs +++ b/src/routes/channels/edit_channel.rs @@ -111,7 +111,10 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> { Message::create( "00000000000000000000000000".to_string(), id.clone(), - Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id.clone() }), + Content::SystemMessage(SystemMessage::ChannelRenamed { + name, + by: user.id.clone(), + }), ) .publish(&target) .await @@ -122,7 +125,9 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> { Message::create( "00000000000000000000000000".to_string(), id.clone(), - Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { by: user.id.clone() }), + Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { + by: user.id.clone(), + }), ) .publish(&target) .await diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs index 3206f23..b0ca01c 100644 --- a/src/routes/channels/message_query.rs +++ b/src/routes/channels/message_query.rs @@ -28,7 +28,7 @@ pub struct Options { #[validate(length(min = 26, max = 26))] after: Option<String>, sort: Option<Sort>, - include_users: Option<bool> + include_users: Option<bool>, } #[get("/<target>/messages?<options..>")] diff --git a/src/routes/channels/message_send.rs b/src/routes/channels/message_send.rs index 38c529d..60591fa 100644 --- a/src/routes/channels/message_send.rs +++ b/src/routes/channels/message_send.rs @@ -59,7 +59,9 @@ pub async fn req(user: User, target: Ref, message: Json<Data>) -> Result<JsonVal let id = Ulid::new().to_string(); let attachments = if let Some(attachment_id) = &message.attachment { - Some(vec![ File::find_and_use(attachment_id, "attachments", "message", &id).await? ]) + Some(vec![ + File::find_and_use(attachment_id, "attachments", "message", &id).await?, + ]) } else { None }; diff --git a/src/routes/root.rs b/src/routes/root.rs index d14ff38..c1f4008 100644 --- a/src/routes/root.rs +++ b/src/routes/root.rs @@ -1,6 +1,7 @@ use crate::util::variables::{ - APP_URL, JANUARY_URL, AUTUMN_URL, DISABLE_REGISTRATION, EXTERNAL_WS_URL, HCAPTCHA_SITEKEY, INVITE_ONLY, - USE_AUTUMN, USE_JANUARY, USE_EMAIL, USE_HCAPTCHA, USE_VOSO, VAPID_PUBLIC_KEY, VOSO_URL, VOSO_WS_HOST, + APP_URL, AUTUMN_URL, DISABLE_REGISTRATION, EXTERNAL_WS_URL, HCAPTCHA_SITEKEY, INVITE_ONLY, + JANUARY_URL, USE_AUTUMN, USE_EMAIL, USE_HCAPTCHA, USE_JANUARY, USE_VOSO, VAPID_PUBLIC_KEY, + VOSO_URL, VOSO_WS_HOST, }; use mongodb::bson::doc; diff --git a/src/util/result.rs b/src/util/result.rs index e130c96..8b39c95 100644 --- a/src/util/result.rs +++ b/src/util/result.rs @@ -29,13 +29,17 @@ pub enum Error { CannotEditMessage, EmptyMessage, CannotRemoveYourself, - GroupTooLarge { max: usize }, + GroupTooLarge { + max: usize, + }, AlreadyInGroup, NotInGroup, // ? General errors. TooManyIds, - FailedValidation { error: ValidationErrors }, + FailedValidation { + error: ValidationErrors, + }, DatabaseError { operation: &'static str, with: &'static str, -- GitLab