tauri_plugin_mongoose/db/
documents.rs1use mongodb::bson::oid::ObjectId;
2use serde_json::Value;
3use crate::db::state::{get_client, get_db_name};
4
5pub async fn create_document(collection_name: String, document: Value) -> Result<Value, String> {
6 let client = get_client().await?;
7 let db_name = get_db_name().await;
8
9 let db = client.database(&db_name);
10 let collection = db.collection::<mongodb::bson::Document>(&collection_name);
11
12 let mut bson_doc = mongodb::bson::to_document(&document).map_err(|e| e.to_string())?;
13
14 if !bson_doc.contains_key("_id") {
15 bson_doc.insert("_id", ObjectId::new());
16 }
17
18 collection.insert_one(bson_doc.clone(), None).await.map_err(|e| e.to_string())?;
19
20 let json_doc: Value = mongodb::bson::from_document(bson_doc).map_err(|e| e.to_string())?;
21 Ok(json_doc)
22}
23
24pub async fn get_document_by_id(collection_name: String, id: String) -> Result<Option<Value>, String> {
25 let client = get_client().await?;
26 let db_name = get_db_name().await;
27
28 let db = client.database(&db_name);
29 let collection = db.collection::<mongodb::bson::Document>(&collection_name);
30
31 let oid = ObjectId::parse_str(&id).map_err(|e| format!("Invalid ID format: {}", e))?;
32 let filter = mongodb::bson::doc! { "_id": oid };
33
34 let result = collection.find_one(filter, None).await.map_err(|e| e.to_string())?;
35
36 match result {
37 Some(doc) => {
38 let json_doc: Value = mongodb::bson::from_document(doc).map_err(|e| e.to_string())?;
39 Ok(Some(json_doc))
40 },
41 None => Ok(None)
42 }
43}