open_lark/service/cloud_docs/bitable/v1/app_table/
batch_delete.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8 constants::AccessTokenType,
9 endpoints::cloud_docs::*,
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13 },
14 impl_executable_builder_owned,
15};
16
17use super::AppTableService;
18
19impl AppTableService {
20 pub async fn batch_delete(
22 &self,
23 request: BatchDeleteTablesRequest,
24 option: Option<RequestOption>,
25 ) -> SDKResult<BaseResponse<BatchDeleteTablesResponse>> {
26 let mut api_req = request.api_request;
27 api_req.http_method = Method::POST;
28 api_req.api_path =
29 BITABLE_V1_TABLES_BATCH_DELETE.replace("{app_token}", &request.app_token);
30 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
31 api_req.body = serde_json::to_vec(&BatchDeleteTablesRequestBody {
32 table_ids: request.table_ids,
33 })?;
34
35 let api_resp = Transport::request(api_req, &self.config, option).await?;
36 Ok(api_resp)
37 }
38}
39
40#[derive(Debug, Default)]
42pub struct BatchDeleteTablesRequest {
43 api_request: ApiRequest,
44 app_token: String,
46 table_ids: Vec<String>,
48}
49
50impl BatchDeleteTablesRequest {
51 pub fn builder() -> BatchDeleteTablesRequestBuilder {
52 BatchDeleteTablesRequestBuilder::default()
53 }
54
55 pub fn new(app_token: impl ToString, table_ids: Vec<String>) -> Self {
57 Self {
58 api_request: ApiRequest::default(),
59 app_token: app_token.to_string(),
60 table_ids,
61 }
62 }
63}
64
65#[derive(Default)]
66pub struct BatchDeleteTablesRequestBuilder {
67 request: BatchDeleteTablesRequest,
68}
69
70impl BatchDeleteTablesRequestBuilder {
71 pub fn app_token(mut self, app_token: impl ToString) -> Self {
73 self.request.app_token = app_token.to_string();
74 self
75 }
76
77 pub fn table_ids(mut self, table_ids: Vec<String>) -> Self {
79 self.request.table_ids = table_ids;
80 self
81 }
82
83 pub fn add_table_id(mut self, table_id: impl ToString) -> Self {
85 self.request.table_ids.push(table_id.to_string());
86 self
87 }
88
89 pub fn build(self) -> BatchDeleteTablesRequest {
90 self.request
91 }
92}
93
94impl_executable_builder_owned!(
95 BatchDeleteTablesRequestBuilder,
96 AppTableService,
97 BatchDeleteTablesRequest,
98 BaseResponse<BatchDeleteTablesResponse>,
99 batch_delete
100);
101
102#[derive(Serialize)]
103struct BatchDeleteTablesRequestBody {
104 table_ids: Vec<String>,
105}
106
107#[derive(Deserialize, Debug)]
108pub struct BatchDeleteTablesResponse {
109 pub deleted: bool,
111}
112
113impl ApiResponseTrait for BatchDeleteTablesResponse {
114 fn data_format() -> ResponseFormat {
115 ResponseFormat::Data
116 }
117}
118
119#[cfg(test)]
120#[allow(unused_variables, unused_unsafe)]
121mod tests {
122 use super::*;
123 use serde_json::json;
124
125 #[test]
126 fn test_batch_delete_tables_request() {
127 let table_ids = vec![
128 "tblsRc9GRRXKqhvW".to_string(),
129 "tbl1234567890abc".to_string(),
130 ];
131
132 let request = BatchDeleteTablesRequest::builder()
133 .app_token("bascnmBA*****yGehy8")
134 .table_ids(table_ids.clone())
135 .build();
136
137 assert_eq!(request.app_token, "bascnmBA*****yGehy8");
138 assert_eq!(request.table_ids, table_ids);
139 }
140
141 #[test]
142 fn test_batch_delete_tables_with_builder() {
143 let request = BatchDeleteTablesRequest::builder()
144 .app_token("bascnmBA*****yGehy8")
145 .add_table_id("tblsRc9GRRXKqhvW")
146 .add_table_id("tbl1234567890abc")
147 .add_table_id("tblabcdefghijklm")
148 .build();
149
150 assert_eq!(request.table_ids.len(), 3);
151 assert_eq!(request.table_ids[0], "tblsRc9GRRXKqhvW");
152 assert_eq!(request.table_ids[1], "tbl1234567890abc");
153 assert_eq!(request.table_ids[2], "tblabcdefghijklm");
154 }
155
156 #[test]
157 fn test_batch_delete_tables_request_new() {
158 let table_ids = vec!["table1".to_string(), "table2".to_string()];
159 let request = BatchDeleteTablesRequest::new("bascnmBA*****yGehy8", table_ids.clone());
160
161 assert_eq!(request.app_token, "bascnmBA*****yGehy8");
162 assert_eq!(request.table_ids, table_ids);
163 }
164
165 #[test]
166 fn test_batch_delete_tables_request_body_serialization() {
167 let body = BatchDeleteTablesRequestBody {
168 table_ids: vec!["table1".to_string(), "table2".to_string()],
169 };
170
171 let serialized = serde_json::to_value(&body).unwrap();
172 let expected = json!({
173 "table_ids": ["table1", "table2"]
174 });
175
176 assert_eq!(serialized, expected);
177 }
178}