1use chimes_utils::{i32_from_str, i64_from_str};
2use rbatis::crud::{Skip, CRUD};
3use rbatis::crud_table;
4use rbatis::error::Error;
5use rbatis::rbatis::Rbatis;
6use rbatis::Page;
7use rbatis::PageRequest;
8use rbson::Bson;
9use serde_derive::{Deserialize, Serialize};
10use std::fmt::Debug;
14
15#[crud_table(table_name:"chimes_data_source"|table_columns:"id,name,code,database_type,server_address,port,db_name,username,password,connection_timeout,execution_timeout,properties,remark,status,create_time,update_time")]
16#[derive(Debug, Clone, Default, Deserialize, Serialize)]
17pub struct ChimesDataSourceInfo {
18 #[serde(default)]
19 #[serde(deserialize_with = "i64_from_str")]
20 pub id: Option<i64>,
21 pub name: Option<String>,
22 pub code: Option<String>,
23 pub database_type: Option<String>,
24 pub server_address: Option<String>,
25 pub port: Option<String>,
26 pub db_name: Option<String>,
27 pub username: Option<String>,
28 pub password: Option<String>,
29 #[serde(default)]
30 #[serde(deserialize_with = "i32_from_str")]
31 pub connection_timeout: Option<i32>,
32 #[serde(default)]
33 #[serde(deserialize_with = "i32_from_str")]
34 pub execution_timeout: Option<i32>,
35 pub properties: Option<String>,
36 pub remark: Option<String>,
37 pub status: Option<String>,
38 pub create_time: Option<rbatis::DateTimeNative>,
39 pub update_time: Option<rbatis::DateTimeNative>,
40}
41
42impl ChimesDataSourceInfo {
43 #[allow(dead_code)]
44 pub async fn from_id(rb: &Rbatis, dict_id: &i64) -> Result<Option<Self>, Error> {
45 let wp = rb.new_wrapper().eq("id", dict_id);
46 rb.fetch_by_wrapper::<Option<Self>>(wp).await
47 }
48
49 #[allow(dead_code)]
50 pub async fn save(&mut self, rb: &Rbatis) -> Result<u64, Error> {
51 match rb.save(self, &[Skip::Column("id")]).await {
52 Ok(ds) => {
53 self.id = ds.last_insert_id;
54 Ok(ds.rows_affected)
55 }
56 Err(err) => Err(err),
57 }
58 }
59
60 #[allow(dead_code)]
61 pub async fn update(&self, rb: &Rbatis) -> Result<u64, Error> {
62 let wp = rb.new_wrapper().eq("id", self.id);
63 rb.update_by_wrapper(self, wp, &[Skip::Column("id")]).await
64 }
65
66 #[allow(dead_code)]
67 pub async fn update_selective(&self, rb: &Rbatis) -> Result<u64, Error> {
68 let wp = rb.new_wrapper().eq("id", self.id);
69 rb.update_by_wrapper(self, wp, &[Skip::Value(Bson::Null)])
70 .await
71 }
72
73 #[allow(dead_code)]
74 pub async fn remove_batch(&self, rb: &Rbatis) -> Result<u64, Error> {
75 let wp = rb
76 .new_wrapper()
77 .r#if(self.id.clone().is_some(), |w| {
78 w.and().eq("id", self.id.unwrap())
79 })
80 .r#if(self.name.clone().is_some(), |w| {
81 w.and().eq("name", self.name.clone().unwrap())
82 })
83 .r#if(self.code.clone().is_some(), |w| {
84 w.and().eq("code", self.code.clone().unwrap())
85 })
86 .r#if(self.database_type.clone().is_some(), |w| {
87 w.and()
88 .eq("database_type", self.database_type.clone().unwrap())
89 })
90 .r#if(self.db_name.clone().is_some(), |w| {
91 w.and().eq("db_name", self.db_name.clone().unwrap())
92 })
93 .r#if(self.status.clone().is_some(), |w| {
94 w.and().eq("status", self.status.clone().unwrap())
95 })
96 .r#if(self.remark.clone().is_some(), |w| {
97 w.and().eq("remark", self.remark.clone().unwrap())
98 })
99 .r#if(self.create_time.clone().is_some(), |w| {
100 w.and().eq("create_time", self.create_time.unwrap())
101 })
102 .r#if(self.update_time.clone().is_some(), |w| {
103 w.and().eq("update_time", self.update_time.unwrap())
104 });
105 rb.remove_by_wrapper::<Self>(wp).await
106 }
107
108 #[allow(dead_code)]
109 pub async fn remove(&mut self, rb: &Rbatis) -> Result<u64, Error> {
110 let wp = rb.new_wrapper().eq("id", self.id);
111 rb.remove_by_wrapper::<Self>(wp).await
112 }
113
114 #[allow(dead_code)]
115 pub async fn query_paged(&self, rb: &Rbatis, curr: u64, ps: u64) -> Result<Page<Self>, Error> {
116 let wp = rb
117 .new_wrapper()
118 .r#if(self.id.clone().is_some(), |w| {
119 w.and().eq("id", self.id.unwrap())
120 })
121 .r#if(self.name.clone().is_some(), |w| {
122 w.and().eq("name", self.name.clone().unwrap())
123 })
124 .r#if(self.code.clone().is_some(), |w| {
125 w.and().eq("code", self.code.clone().unwrap())
126 })
127 .r#if(self.database_type.clone().is_some(), |w| {
128 w.and()
129 .eq("database_type", self.database_type.clone().unwrap())
130 })
131 .r#if(self.db_name.clone().is_some(), |w| {
132 w.and().eq("db_name", self.db_name.clone().unwrap())
133 })
134 .r#if(self.status.clone().is_some(), |w| {
135 w.and().eq("status", self.status.clone().unwrap())
136 })
137 .r#if(self.remark.clone().is_some(), |w| {
138 w.and().eq("remark", self.remark.clone().unwrap())
139 })
140 .r#if(self.create_time.clone().is_some(), |w| {
141 w.and().eq("create_time", self.create_time.unwrap())
142 })
143 .r#if(self.update_time.clone().is_some(), |w| {
144 w.and().eq("update_time", self.update_time.unwrap())
145 });
146 rb.fetch_page_by_wrapper::<Self>(wp, &PageRequest::new(curr, ps))
147 .await
148 }
149
150 #[allow(dead_code)]
151 pub async fn query_list(&self, rb: &Rbatis) -> Result<Vec<Self>, Error> {
152 let wp = rb
153 .new_wrapper()
154 .r#if(self.id.clone().is_some(), |w| {
155 w.and().eq("id", self.id.unwrap())
156 })
157 .r#if(self.name.clone().is_some(), |w| {
158 w.and().eq("name", self.name.clone().unwrap())
159 })
160 .r#if(self.code.clone().is_some(), |w| {
161 w.and().eq("code", self.code.clone().unwrap())
162 })
163 .r#if(self.database_type.clone().is_some(), |w| {
164 w.and()
165 .eq("database_type", self.database_type.clone().unwrap())
166 })
167 .r#if(self.db_name.clone().is_some(), |w| {
168 w.and().eq("db_name", self.db_name.clone().unwrap())
169 })
170 .r#if(self.status.clone().is_some(), |w| {
171 w.and().eq("status", self.status.clone().unwrap())
172 })
173 .r#if(self.remark.clone().is_some(), |w| {
174 w.and().eq("remark", self.remark.clone().unwrap())
175 })
176 .r#if(self.create_time.clone().is_some(), |w| {
177 w.and().eq("create_time", self.create_time.unwrap())
178 })
179 .r#if(self.update_time.clone().is_some(), |w| {
180 w.and().eq("update_time", self.update_time.unwrap())
181 });
182 rb.fetch_list_by_wrapper::<Self>(wp).await
183 }
184
185 #[allow(dead_code)]
186 pub async fn remove_ids(rb: &Rbatis, ids: &[i64]) -> Result<u64, Error> {
187 let wp = rb.new_wrapper().r#in("id", ids);
188 rb.remove_by_wrapper::<Self>(wp).await
189 }
190}