rest_model/
db_client.rs

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    /// GET /resources/:id
20    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    /// GET /resources
28    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    /// PUT /resources
36    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    /// PATCH /resources
44    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    /// DELETE /resources
52    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}