diff --git a/crates/core/database/src/models/bots/model.rs b/crates/core/database/src/models/bots/model.rs index 384d4829..6e284125 100644 --- a/crates/core/database/src/models/bots/model.rs +++ b/crates/core/database/src/models/bots/model.rs @@ -56,9 +56,10 @@ auto_derived!( } ); +#[allow(clippy::disallowed_methods)] impl Bot { /// Remove a field from this object - pub fn remove(&mut self, field: &FieldsBot) { + pub fn remove_field(&mut self, field: &FieldsBot) { match field { FieldsBot::Token => self.token = nanoid::nanoid!(64), FieldsBot::InteractionsURL => { @@ -67,6 +68,27 @@ impl Bot { } } + /// Update this bot + pub async fn update( + &mut self, + db: &Database, + mut partial: PartialBot, + remove: Vec, + ) -> Result<()> { + if remove.contains(&FieldsBot::Token) { + partial.token = Some(nanoid::nanoid!(64)); + } + + for field in &remove { + self.remove_field(field); + } + + db.update_bot(&self.id, &partial, remove).await?; + + self.apply_options(partial); + Ok(()) + } + /// Delete this bot pub async fn delete(&self, db: &Database) -> Result<()> { // db.fetch_user(&self.id).await?.mark_deleted(db).await?; @@ -76,7 +98,7 @@ impl Bot { #[cfg(test)] mod tests { - use crate::{Bot, FieldsBot}; + use crate::{Bot, FieldsBot, PartialBot}; #[async_std::test] async fn crud() { @@ -94,16 +116,19 @@ mod tests { }; db.insert_bot(&bot).await.unwrap(); - db.update_bot( - bot_id, - &crate::PartialBot { - public: Some(true), - ..Default::default() - }, - vec![FieldsBot::Token, FieldsBot::InteractionsURL], - ) - .await - .unwrap(); + + let mut updated_bot = bot.clone(); + updated_bot + .update( + &db, + PartialBot { + public: Some(true), + ..Default::default() + }, + vec![FieldsBot::Token, FieldsBot::InteractionsURL], + ) + .await + .unwrap(); let fetched_bot1 = db.fetch_bot(bot_id).await.unwrap(); let fetched_bot2 = db.fetch_bot_by_token(&fetched_bot1.token).await.unwrap(); @@ -114,6 +139,7 @@ mod tests { assert!(bot.interactions_url.is_some()); assert!(fetched_bot1.interactions_url.is_none()); assert_ne!(bot.token, fetched_bot1.token); + assert_eq!(updated_bot, fetched_bot1); assert_eq!(fetched_bot1, fetched_bot2); assert_eq!(fetched_bot1, fetched_bots[0]); assert_eq!(1, db.get_number_of_bots_by_user(user_id).await.unwrap()); diff --git a/crates/core/database/src/models/bots/ops/reference.rs b/crates/core/database/src/models/bots/ops/reference.rs index 26ce98c6..3a8caff2 100644 --- a/crates/core/database/src/models/bots/ops/reference.rs +++ b/crates/core/database/src/models/bots/ops/reference.rs @@ -43,7 +43,8 @@ impl AbstractBots for ReferenceDb { let mut bots = self.bots.lock().await; if let Some(bot) = bots.get_mut(id) { for field in remove { - bot.remove(&field); + #[allow(clippy::disallowed_methods)] + bot.remove_field(&field); } bot.apply_options(partial.clone());