mydb_sqlx/
base_service.rs

1use crate::BaseEntity;
2use crate::BaseMapper;
3use serde::Serialize;
4use sqlx::mysql::MySqlRow;
5use sqlx::{ FromRow, Error };
6use sqlx_core::mysql::MySqlQueryResult;
7use core::fmt::Debug;
8use sqlx::MySqlPool;
9use crate::PageData;
10
11pub fn service<T> (db: MySqlPool) -> BaseService<T> 
12where 
13T: for<'a> FromRow<'a, MySqlRow> + Send + Unpin + Debug + Serialize + BaseEntity
14{
15  BaseService {
16    mapper: BaseMapper::<T>::new(db)
17  }
18}
19
20#[derive(Debug, Clone)]
21pub struct BaseService<T: BaseEntity> {
22  pub mapper: BaseMapper<T>,
23}
24
25impl<T: for<'a> FromRow<'a, MySqlRow> + Send + Unpin + Debug + Serialize + BaseEntity>
26BaseService<T>
27{
28
29  pub async fn get_by_id(self, id: u64) -> Result<Option<T>, Error>
30  {
31    match self.mapper.select_by_id(id).await {
32      Ok(res) => Ok(res),
33      Err(err) => Err(err),
34    }
35  }
36
37  pub async fn get_one(self, wrapper: String) -> Result<Option<T>, Error> {
38    match self.mapper.select_one(wrapper).await {
39      Ok(res) => Ok(res),
40      Err(err) => Err(err),
41    }
42  }
43
44  pub async fn all(self) -> Result<Vec<T>, Error> {
45    match self.mapper.select_list(format!("")).await {
46      Ok(res) => Ok(res),
47      Err(err) => Err(err),
48    }
49  }
50
51  pub async fn list(self, wrapper: String) -> Result<Vec<T>, Error> {
52    match self.mapper.select_list(wrapper).await {
53      Ok(res) => Ok(res),
54      Err(err) => Err(err),
55    }
56  }
57
58  pub async fn list_by_ids(self, ids: Vec<u64>) -> Result<Vec<T>, Error> {
59    match self.mapper.select_batch_ids(ids).await {
60      Ok(res) => Ok(res),
61      Err(err) => Err(err),
62    }
63  }
64
65  pub async fn list_by_map(self, wrapper: String) -> Result<Option<T>, Error> {
66    match self.mapper.select_by_map(wrapper).await {
67      Ok(res) => Ok(res),
68      Err(err) => Err(err),
69    }
70  }
71
72  pub async fn page(self, page: String, wrapper: String) -> Result<PageData<T>, Error> {
73    match self.mapper.select_page(page, wrapper).await {
74      Ok(res) => Ok(res),
75      Err(err) => Err(err),
76    }
77  }
78
79  pub async fn count(self, wrapper: String) -> Result<i64, Error> {
80    match self.mapper.total(wrapper).await {
81      Ok(res) => Ok(res),
82      Err(err) => Err(err),
83    }
84  }
85
86  pub async fn save(self, entity: T) -> Result<MySqlQueryResult, Error> {
87    match self.mapper.insert(entity).await {
88      Ok(res) => Ok(res),
89      Err(err) => Err(err),
90    }
91  }
92
93  pub async fn save_batch(self, entity_vec: Vec<T>) -> Result<MySqlQueryResult, Error> {
94    match self.mapper.insert_batch_some_column(entity_vec).await {
95      Ok(res) => Ok(res),
96      Err(err) => Err(err),
97    }
98  }
99
100  pub async fn update(self, entity: T, wrapper: String) -> Result<MySqlQueryResult, Error> {
101    match self.mapper.update(entity, wrapper).await {
102      Ok(res) => Ok(res),
103      Err(err) => Err(err),
104    }
105  }
106
107  pub async fn update_by_id(self, entity: T) -> Result<MySqlQueryResult, Error> {
108    match self.mapper.update_by_id(entity).await {
109      Ok(res) => Ok(res),
110      Err(err) => Err(err),
111    }
112  }
113
114  pub async fn remove(self, wrapper: String) -> Result<MySqlQueryResult, Error> {
115    match self.mapper.delete(wrapper).await {
116      Ok(res) => Ok(res),
117      Err(err) => Err(err),
118    }
119  }
120
121  pub async fn remove_by_id(self, id: u64) -> Result<MySqlQueryResult, Error> {
122    match self.mapper.delete_by_id(id).await {
123      Ok(res) => Ok(res),
124      Err(err) => Err(err),
125    }
126  }
127
128  pub async fn remove_by_ids(self, ids: Vec<u64>) -> Result<MySqlQueryResult, Error> {
129    match self.mapper.delete_batch_ids(ids).await {
130      Ok(res) => Ok(res),
131      Err(err) => Err(err),
132    }
133  }
134
135}