From f4ee35fb093ca49f0a64ff4b17fd61587df28145 Mon Sep 17 00:00:00 2001 From: IAmTomahawkx Date: Wed, 6 Aug 2025 14:18:40 -0700 Subject: [PATCH] fix: don't update the same field while trying to remove it fixes #392 --- .../database/src/models/users/ops/mongodb.rs | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/crates/core/database/src/models/users/ops/mongodb.rs b/crates/core/database/src/models/users/ops/mongodb.rs index d4292aeb..66de248e 100644 --- a/crates/core/database/src/models/users/ops/mongodb.rs +++ b/crates/core/database/src/models/users/ops/mongodb.rs @@ -212,16 +212,34 @@ impl AbstractUsers for MongoDb { partial: &PartialUser, remove: Vec, ) -> Result<()> { - query!( - self, - update_one_by_id, - COL, - id, - partial, - remove.iter().map(|x| x as &dyn IntoDocumentPath).collect(), - None - ) - .map(|_| ()) + if remove.contains(&FieldsUser::StatusText) && partial.status.is_some() { + // stupid-ass workaround to fix mongo conflicting the same item + let _: Result<()> = query!( + self, + update_one_by_id, + COL, + id, + PartialUser { + ..Default::default() + }, + remove.iter().map(|x| x as &dyn IntoDocumentPath).collect(), + None + ) + .map(|_| ()); + + query!(self, update_one_by_id, COL, id, partial, vec![], None).map(|_| ()) + } else { + query!( + self, + update_one_by_id, + COL, + id, + partial, + remove.iter().map(|x| x as &dyn IntoDocumentPath).collect(), + None + ) + .map(|_| ()) + } } /// Set relationship with another user