1use anyhow::Error;
2
3use crate::{DeleteParams, Doc, PaginationResult, PatchParams, UpdateResult, UpsertResult};
4
5use super::{pagination::PaginationParams, response::DeleteResult, RestModel};
6
7pub trait DbClient<T>: Sync
8where
9 T: RestModel,
10{
11 fn generate_id(&self) -> String;
12
13 fn init(
14 &self,
15 db_name: &str,
16 table_name: &str,
17 ) -> impl std::future::Future<Output = Result<(), Error>>;
18
19 fn select_by_id(
21 &self,
22 db_name: &str,
23 table_name: &str,
24 id: &str,
25 ) -> impl std::future::Future<Output = Result<Doc<T>, Error>>;
26
27 fn paginate(
29 &self,
30 db_name: &str,
31 table_name: &str,
32 pagination_params: &PaginationParams,
33 ) -> impl std::future::Future<Output = Result<PaginationResult<T>, Error>>;
34
35 fn upsert(
37 &self,
38 db_name: &str,
39 table_name: &str,
40 items: &[Doc<T>],
41 ) -> impl std::future::Future<Output = Result<UpsertResult, Error>>;
42
43 fn update(
45 &self,
46 db_name: &str,
47 table_name: &str,
48 params: &PatchParams,
49 ) -> impl std::future::Future<Output = Result<UpdateResult, Error>>;
50
51 fn delete(
53 &self,
54 db_name: &str,
55 table_name: &str,
56 filter: &DeleteParams,
57 ) -> impl std::future::Future<Output = Result<DeleteResult, Error>>;
58}