shared/domain/ports/
database.rs1use async_trait::async_trait;
2use serde::{Serialize, de::DeserializeOwned};
3
4use super::query::QueryBuilder;
5use crate::error::CoreError;
6
7#[async_trait]
8pub trait DatabaseAdapter<T: Send + Sync + Serialize + DeserializeOwned + 'static>:
9 Send + Sync
10{
11 async fn insert(&self, data: T) -> Result<String, CoreError>;
13 async fn insert_many(&self, data: Vec<T>) -> Result<Vec<String>, CoreError>;
14 async fn upsert(&self, data: T) -> Result<String, CoreError>;
15 async fn upsert_many(&self, data: Vec<T>) -> Result<Vec<String>, CoreError>;
16
17 async fn find_one(&self, filter: QueryBuilder) -> Result<Option<T>, CoreError>;
19 async fn find_all(&self, filter: QueryBuilder) -> Result<Vec<T>, CoreError>;
20
21 async fn find_one_and_update(
23 &self,
24 filter: QueryBuilder,
25 update: QueryBuilder,
26 ) -> Result<Option<T>, CoreError>;
27 async fn update_many(
28 &self,
29 filter: QueryBuilder,
30 update: QueryBuilder,
31 ) -> Result<(), CoreError>;
32
33 async fn delete_one(&self, filter: QueryBuilder) -> Result<(), CoreError>;
35 async fn delete_many(&self, filter: QueryBuilder) -> Result<(), CoreError>;
36
37 }
40
41