use crate::error::QuickDbResult;
use crate::types::*;
use async_trait::async_trait;
use std::collections::HashMap;
use tokio::sync::oneshot;
#[async_trait]
pub trait OdmOperations {
async fn create(
&self,
collection: &str,
data: HashMap<String, DataValue>,
alias: Option<&str>,
) -> QuickDbResult<DataValue>;
async fn find_by_id(
&self,
collection: &str,
id: &str,
alias: Option<&str>,
) -> QuickDbResult<Option<DataValue>>;
async fn find(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
options: Option<QueryOptions>,
alias: Option<&str>,
) -> QuickDbResult<Vec<DataValue>> {
self.find_with_cache_control(collection, conditions, options, alias, false).await
}
async fn find_with_cache_control(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
options: Option<QueryOptions>,
alias: Option<&str>,
bypass_cache: bool,
) -> QuickDbResult<Vec<DataValue>>;
async fn find_with_groups(
&self,
collection: &str,
condition_groups: Vec<QueryConditionGroup>,
options: Option<QueryOptions>,
alias: Option<&str>,
) -> QuickDbResult<Vec<DataValue>> {
self.find_with_groups_with_cache_control(collection, condition_groups, options, alias, false).await
}
async fn find_with_groups_with_cache_control(
&self,
collection: &str,
condition_groups: Vec<QueryConditionGroup>,
options: Option<QueryOptions>,
alias: Option<&str>,
bypass_cache: bool,
) -> QuickDbResult<Vec<DataValue>> {
let condition_groups_with_config: Vec<crate::types::QueryConditionGroupWithConfig> = condition_groups
.into_iter()
.map(|g| g.into())
.collect();
self.find_with_groups_with_cache_control_and_config(collection, condition_groups_with_config, options, alias, bypass_cache).await
}
async fn find_with_groups_with_config(
&self,
collection: &str,
condition_groups: Vec<crate::types::QueryConditionGroupWithConfig>,
options: Option<QueryOptions>,
alias: Option<&str>,
) -> QuickDbResult<Vec<DataValue>> {
self.find_with_groups_with_cache_control_and_config(collection, condition_groups, options, alias, false).await
}
async fn find_with_groups_with_cache_control_and_config(
&self,
collection: &str,
condition_groups: Vec<crate::types::QueryConditionGroupWithConfig>,
options: Option<QueryOptions>,
alias: Option<&str>,
bypass_cache: bool,
) -> QuickDbResult<Vec<DataValue>>;
async fn update(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
updates: HashMap<String, DataValue>,
alias: Option<&str>,
) -> QuickDbResult<u64>;
async fn update_with_operations(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
operations: Vec<crate::types::UpdateOperation>,
alias: Option<&str>,
) -> QuickDbResult<u64>;
async fn update_by_id(
&self,
collection: &str,
id: &str,
updates: HashMap<String, DataValue>,
alias: Option<&str>,
) -> QuickDbResult<bool>;
async fn delete(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
alias: Option<&str>,
) -> QuickDbResult<u64>;
async fn delete_by_id(
&self,
collection: &str,
id: &str,
alias: Option<&str>,
) -> QuickDbResult<bool>;
async fn count(
&self,
collection: &str,
conditions: Vec<QueryConditionWithConfig>,
alias: Option<&str>,
) -> QuickDbResult<u64>;
async fn count_with_groups(
&self,
collection: &str,
condition_groups: Vec<QueryConditionGroup>,
alias: Option<&str>,
) -> QuickDbResult<u64> {
let condition_groups_with_config: Vec<crate::types::QueryConditionGroupWithConfig> = condition_groups
.into_iter()
.map(|g| g.into())
.collect();
self.count_with_groups_with_config(collection, condition_groups_with_config, alias).await
}
async fn count_with_groups_with_config(
&self,
collection: &str,
condition_groups: Vec<crate::types::QueryConditionGroupWithConfig>,
alias: Option<&str>,
) -> QuickDbResult<u64>;
async fn get_server_version(&self, alias: Option<&str>) -> QuickDbResult<String>;
async fn create_stored_procedure(
&self,
config: crate::stored_procedure::StoredProcedureConfig,
) -> QuickDbResult<crate::stored_procedure::StoredProcedureCreateResult>;
async fn execute_stored_procedure(
&self,
procedure_name: &str,
database_alias: Option<&str>,
params: Option<std::collections::HashMap<String, crate::types::DataValue>>,
) -> QuickDbResult<crate::stored_procedure::StoredProcedureQueryResult>;
}
pub use super::types::OdmRequest;