From cf7bb832dad0c25052630ddf6c598e48f2c28d4e Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Mon, 3 May 2021 21:02:12 +0100
Subject: [PATCH] Really make sure MongoDB driver can't screw up.

---
 set_version.sh                      |  2 +-
 src/routes/channels/edit_channel.rs | 20 +++++++++++---------
 src/routes/users/edit_user.rs       | 18 ++++++++++--------
 src/version.rs                      |  2 +-
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/set_version.sh b/set_version.sh
index f1ba005..ffe5b03 100755
--- a/set_version.sh
+++ b/set_version.sh
@@ -1,3 +1,3 @@
 #!/bin/bash
-export version=0.4.1-alpha.7-patch.0
+export version=0.4.1-alpha.7-patch.2
 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs
diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs
index 8271020..5242ec9 100644
--- a/src/routes/channels/edit_channel.rs
+++ b/src/routes/channels/edit_channel.rs
@@ -26,7 +26,7 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
     data.validate()
         .map_err(|error| Error::FailedValidation { error })?;
 
-    if data.name.is_none() || data.description.is_none() || data.icon.is_none() || data.remove.is_none() {
+    if data.name.is_none() && data.description.is_none() && data.icon.is_none() && data.remove.is_none() {
         return Ok(())
     }
 
@@ -85,14 +85,16 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
                 operations.insert("$unset", unset);
             }
 
-            get_collection("channels")
-            .update_one(
-                doc! { "_id": &id },
-                operations,
-                None
-            )
-            .await
-            .map_err(|_| Error::DatabaseError { operation: "update_one", with: "channel" })?;
+            if operations.len() > 0 {
+                get_collection("channels")
+                .update_one(
+                    doc! { "_id": &id },
+                    operations,
+                    None
+                )
+                .await
+                .map_err(|_| Error::DatabaseError { operation: "update_one", with: "channel" })?;
+            }
 
             ClientboundNotification::ChannelUpdate {
                 id: id.clone(),
diff --git a/src/routes/users/edit_user.rs b/src/routes/users/edit_user.rs
index 54747a3..5ce6b24 100644
--- a/src/routes/users/edit_user.rs
+++ b/src/routes/users/edit_user.rs
@@ -35,7 +35,7 @@ pub async fn req(user: User, data: Json<Data>, _ignore_id: String) -> Result<()>
     data.validate()
         .map_err(|error| Error::FailedValidation { error })?;
 
-    if data.status.is_none() || data.profile.is_none() || data.avatar.is_none() || data.remove.is_none() {
+    if data.status.is_none() && data.profile.is_none() && data.avatar.is_none() && data.remove.is_none() {
         return Ok(())
     }
 
@@ -119,13 +119,15 @@ pub async fn req(user: User, data: Json<Data>, _ignore_id: String) -> Result<()>
         operations.insert("$unset", unset);
     }
 
-    get_collection("users")
-        .update_one(doc! { "_id": &user.id }, operations, None)
-        .await
-        .map_err(|_| Error::DatabaseError {
-            operation: "update_one",
-            with: "user",
-        })?;
+    if operations.len() > 0 {
+        get_collection("users")
+            .update_one(doc! { "_id": &user.id }, operations, None)
+            .await
+            .map_err(|_| Error::DatabaseError {
+                operation: "update_one",
+                with: "user",
+            })?;
+    }
 
     if let Some(status) = &data.status {
         ClientboundNotification::UserUpdate {
diff --git a/src/version.rs b/src/version.rs
index 4611a2e..f0629a0 100644
--- a/src/version.rs
+++ b/src/version.rs
@@ -1 +1 @@
-pub const VERSION: &str = "0.4.1-alpha.7-patch.0";
+pub const VERSION: &str = "0.4.1-alpha.7-patch.2";
-- 
GitLab