Skip to main content

tauri_plugin_mongoose/db/
documents.rs

1use 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}