From a858f0838a91ba42f69dd00e5624aac353fb7b69 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 5 May 2025 08:13:11 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/mod.rs | 23 +++++++++++++++++++++++ tests/basic.rs | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/db/mod.rs b/src/db/mod.rs index 53049c4..afb5775 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -170,6 +170,25 @@ impl Database { query_t(predicate, self) } + /// Delete an entry + pub fn delete< + X: Into>, + T: 'static + Serialize + Identifiable + Send + Sync + Clone, + >( + &self, + entry: X, + ) { + // delete from cache + let entry: IdRef = entry.into(); + let col = T::model_id(); + let id = entry.id.trim_start_matches(&format!("{col}::")).to_string(); + self.del_cache::(id.clone()); + // delete from vfs + self.storage + .remove_file(&format!("/collection/{col}/{id}")) + .unwrap(); + } + /// Update every model in `entries` according to `u(_)` pub fn update( &self, @@ -231,6 +250,10 @@ impl Database { .insert(id, Box::new(model.clone())); } + pub fn del_cache(&self, id: String) { + self.records.entry(T::model_id()).or_default().remove(&id); + } + /// Get a model `T` from `id` pub fn get< T: Identifiable + Serialize + Send + Sync + for<'b> Deserialize<'b> + 'static, diff --git a/tests/basic.rs b/tests/basic.rs index 7f4b2c9..4ddc1ff 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -22,3 +22,24 @@ fn save_load_db() { let get_model: Model = db.get(data.as_str()).unwrap(); assert_eq!(get_model.read().id.to_string(), data); } + +#[test] +fn save_del_db() { + let data = "TestData".to_string(); + let db = Database::in_memory(); + + let m = TestModel { + id: Id::String(data.clone()), + data: data.clone(), + }; + + db.save(m); + + let get_model: Model = db.get(data.as_str()).unwrap(); + assert_eq!(get_model.read().id.to_string(), data); + + db.delete(&get_model); + + let get_model: Option> = db.get(data.as_str()); + assert!(get_model.is_none()); +}