From d4f7c4a77d6ca5465f10c7d354bf0d1420c5c718 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Mon, 16 Aug 2021 00:18:14 +0100 Subject: [PATCH] add nsfw to servers and channels --- src/database/entities/channel.rs | 21 ++++++++++++++++++--- src/database/entities/server.rs | 7 +++++++ src/routes/channels/channel_edit.rs | 6 ++++++ src/routes/channels/group_create.rs | 5 ++++- src/routes/servers/channel_create.rs | 10 ++++++++-- src/routes/servers/server_create.rs | 6 +++++- src/routes/servers/server_edit.rs | 6 ++++++ 7 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index f3029660..dbf667a6 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -57,7 +57,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] permissions: Option, - }, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool + }, TextChannel { #[serde(rename = "_id")] id: String, @@ -77,7 +80,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool }, VoiceChannel { #[serde(rename = "_id")] @@ -95,7 +101,11 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool + }, } @@ -395,3 +405,8 @@ impl Channel { } } } + + +fn is_false(value: &bool) -> bool { + !value +} \ No newline at end of file diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index 6f050ad1..97abccf6 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -107,6 +107,9 @@ pub struct Server { pub icon: Option, #[serde(skip_serializing_if = "Option::is_none")] pub banner: Option, + + #[serde(skip_serializing_if = "is_false", default)] + pub nsfw: bool } impl Server { @@ -436,3 +439,7 @@ impl Server { })?) } } + +fn is_false(value: &bool) -> bool { + !value +} \ No newline at end of file diff --git a/src/routes/channels/channel_edit.rs b/src/routes/channels/channel_edit.rs index d32a5a87..f071c79b 100644 --- a/src/routes/channels/channel_edit.rs +++ b/src/routes/channels/channel_edit.rs @@ -18,6 +18,8 @@ pub struct Data { #[validate(length(min = 1, max = 128))] icon: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -86,6 +88,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { remove_icon = true; } + if let Some(nsfw) = &data.nsfw { + set.insert("nsfw", nsfw); + } + let mut operations = doc! {}; if set.len() > 0 { operations.insert("$set", &set); diff --git a/src/routes/channels/group_create.rs b/src/routes/channels/group_create.rs index 80bf372a..7d0ce530 100644 --- a/src/routes/channels/group_create.rs +++ b/src/routes/channels/group_create.rs @@ -20,6 +20,8 @@ pub struct Data { #[validate(length(min = 1, max = 36))] nonce: String, users: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -77,7 +79,8 @@ pub async fn req(user: User, info: Json) -> Result { recipients: set.into_iter().collect::>(), icon: None, last_message: None, - permissions: None + permissions: None, + nsfw: info.nsfw.unwrap_or_default() }; channel.clone().publish().await?; diff --git a/src/routes/servers/channel_create.rs b/src/routes/servers/channel_create.rs index ce472726..12520ed5 100644 --- a/src/routes/servers/channel_create.rs +++ b/src/routes/servers/channel_create.rs @@ -32,6 +32,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option, } #[post("//channels", data = "")] @@ -80,7 +82,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default(), }, ChannelType::Voice => Channel::VoiceChannel { id: id.clone(), @@ -92,7 +96,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { icon: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default() } }; diff --git a/src/routes/servers/server_create.rs b/src/routes/servers/server_create.rs index 8d8d6736..88c664ae 100644 --- a/src/routes/servers/server_create.rs +++ b/src/routes/servers/server_create.rs @@ -18,6 +18,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -75,6 +77,7 @@ pub async fn req(user: User, info: Json) -> Result { icon: None, banner: None, + nsfw: info.nsfw.unwrap_or_default() }; Channel::TextChannel { @@ -88,7 +91,8 @@ pub async fn req(user: User, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + nsfw: false } .publish() .await?; diff --git a/src/routes/servers/server_edit.rs b/src/routes/servers/server_edit.rs index b4f7368a..ac4621f4 100644 --- a/src/routes/servers/server_edit.rs +++ b/src/routes/servers/server_edit.rs @@ -18,6 +18,8 @@ pub struct Data { categories: Option>, system_messages: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -105,6 +107,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { set.insert("system_messages", to_bson(&system_messages).map_err(|_| Error::DatabaseError { operation: "to_document", with: "system_messages" })?); } + if let Some(nsfw) = &data.nsfw { + set.insert("nsfw", nsfw); + } + let mut operations = doc! {}; if set.len() > 0 { operations.insert("$set", &set);