open_lark/service/cloud_docs/bitable/v1/app_table/
batch_delete.rs

1use 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    /// 删除多个数据表
21    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/// 批量删除数据表请求
41#[derive(Debug, Default)]
42pub struct BatchDeleteTablesRequest {
43    api_request: ApiRequest,
44    /// 多维表格的 app_token
45    app_token: String,
46    /// 要删除的数据表 ID 列表
47    table_ids: Vec<String>,
48}
49
50impl BatchDeleteTablesRequest {
51    pub fn builder() -> BatchDeleteTablesRequestBuilder {
52        BatchDeleteTablesRequestBuilder::default()
53    }
54
55    /// 创建批量删除数据表请求
56    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    /// 多维表格的 app_token
72    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    /// 要删除的数据表 ID 列表
78    pub fn table_ids(mut self, table_ids: Vec<String>) -> Self {
79        self.request.table_ids = table_ids;
80        self
81    }
82
83    /// 添加单个数据表 ID
84    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    /// 删除结果列表
110    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}