use actix_web::{delete, get, post, put}; use actix_web::{web, HttpResponse}; use indexmap::IndexMap; use serde_json::Value; use serde::Deserialize; use crate::Data; use crate::error::ResponseError; use crate::helpers::Authentication; use crate::routes::IndexParam; type Document = IndexMap; #[derive(Deserialize)] struct DocumentParam { _index_uid: String, _document_id: String, } pub fn services(cfg: &mut web::ServiceConfig) { cfg.service(get_document) .service(delete_document) .service(get_all_documents) .service(add_documents) .service(update_documents) .service(delete_documents) .service(clear_all_documents); } #[get( "/indexes/{index_uid}/documents/{document_id}", wrap = "Authentication::Public" )] async fn get_document( _data: web::Data, _path: web::Path, ) -> Result { todo!() } #[delete( "/indexes/{index_uid}/documents/{document_id}", wrap = "Authentication::Private" )] async fn delete_document( _data: web::Data, _path: web::Path, ) -> Result { todo!() } #[derive(Deserialize)] #[serde(rename_all = "camelCase", deny_unknown_fields)] struct BrowseQuery { _offset: Option, _limit: Option, _attributes_to_retrieve: Option, } #[get("/indexes/{index_uid}/documents", wrap = "Authentication::Public")] async fn get_all_documents( _data: web::Data, _path: web::Path, _params: web::Query, ) -> Result { todo!() } //fn find_primary_key(document: &IndexMap) -> Option { //for key in document.keys() { //if key.to_lowercase().contains("id") { //return Some(key.to_string()); //} //} //None //} #[derive(Deserialize)] #[serde(rename_all = "camelCase", deny_unknown_fields)] struct UpdateDocumentsQuery { _primary_key: Option, } async fn update_multiple_documents( _data: web::Data, _path: web::Path, _params: web::Query, _body: web::Json>, _is_partial: bool, ) -> Result { todo!() } #[post("/indexes/{index_uid}/documents", wrap = "Authentication::Private")] async fn add_documents( data: web::Data, _path: web::Path, _params: web::Query, body: web::Json>, ) -> Result { todo!() } #[put("/indexes/{index_uid}/documents", wrap = "Authentication::Private")] async fn update_documents( data: web::Data, path: web::Path, params: web::Query, body: web::Json>, ) -> Result { update_multiple_documents(data, path, params, body, true).await } #[post( "/indexes/{index_uid}/documents/delete-batch", wrap = "Authentication::Private" )] async fn delete_documents( _data: web::Data, _path: web::Path, _body: web::Json>, ) -> Result { todo!() } #[delete("/indexes/{index_uid}/documents", wrap = "Authentication::Private")] async fn clear_all_documents( _data: web::Data, _path: web::Path, ) -> Result { todo!() }