meegle/view/
api.rs

1use super::types::*;
2use crate::client::{AuthType, Client};
3use crate::error::ApiResult;
4
5pub trait ViewApi {
6    /// 获取视图列表及配置信息
7    /// 该接口用于在指定空间,搜索符合请求参数中传入条件的视图列表及相关配置信息
8    fn get_view_list(
9        &self,
10        request: GetViewListRequest,
11        auth: AuthType,
12    ) -> impl std::future::Future<Output = ApiResult<GetViewListResponse>> + Send;
13
14    /// 获取视图下工作项列表
15    /// 该接口用于获取指定视图中的所有工作项实例列表
16    fn get_fix_view(
17        &self,
18        request: GetFixViewRequest,
19        auth: AuthType,
20    ) -> impl std::future::Future<Output = ApiResult<GetFixViewResponse>> + Send;
21
22    /// 获取视图下工作项列表(全景视图)
23    /// 该接口用于获取指定全景视图中的所有工作项实例列表和详情信息
24    fn get_panoramic_view(
25        &self,
26        request: GetPanoramicViewRequest,
27        auth: AuthType,
28    ) -> impl std::future::Future<Output = ApiResult<GetPanoramicViewResponse>> + Send;
29
30    /// 创建固定视图
31    /// 该接口用于在指定空间和工作项类型下新增一个固定视图
32    fn create_fix_view(
33        &self,
34        request: CreateFixViewRequest,
35        auth: AuthType,
36    ) -> impl std::future::Future<Output = ApiResult<CreateFixViewResponse>> + Send;
37
38    /// 更新固定视图
39    /// 该接口用于添加或删除固定视图中的工作项
40    fn update_fix_view(
41        &self,
42        request: UpdateFixViewRequest,
43        auth: AuthType,
44    ) -> impl std::future::Future<Output = ApiResult<UpdateFixViewResponse>> + Send;
45
46    /// 创建条件视图
47    /// 该接口用于在指定空间和工作项类型下新增一个条件视图
48    fn create_condition_view(
49        &self,
50        request: CreateConditionViewRequest,
51        auth: AuthType,
52    ) -> impl std::future::Future<Output = ApiResult<CreateConditionViewResponse>> + Send;
53
54    /// 更新条件视图
55    /// 该接口用于对一个指定条件视图更新其筛选条件和协作者信息
56    fn update_condition_view(
57        &self,
58        request: UpdateConditionViewRequest,
59        auth: AuthType,
60    ) -> impl std::future::Future<Output = ApiResult<UpdateConditionViewResponse>> + Send;
61
62    /// 删除视图
63    /// 该接口用于删除指定空间的一个视图,支持条件、固定以及全景视图
64    fn delete_view(
65        &self,
66        request: DeleteViewRequest,
67        auth: AuthType,
68    ) -> impl std::future::Future<Output = ApiResult<DeleteViewResponse>> + Send;
69}
70
71impl ViewApi for Client {
72    async fn get_view_list(
73        &self,
74        request: GetViewListRequest,
75        auth: AuthType,
76    ) -> ApiResult<GetViewListResponse> {
77        Ok(self
78            .post(
79                &format!("{}/view_conf/list", request.project_key),
80                &request,
81                auth,
82            )
83            .await?)
84    }
85
86    async fn get_fix_view(
87        &self,
88        request: GetFixViewRequest,
89        auth: AuthType,
90    ) -> ApiResult<GetFixViewResponse> {
91        let url = format!(
92            "{}/fix_view/{}?page_size={}&page_num={}",
93            request.project_key,
94            request.view_id,
95            request.page_size.unwrap_or(10),
96            request.page_num.unwrap_or(1)
97        );
98        Ok(self.get(&url, auth).await?)
99    }
100
101    async fn get_panoramic_view(
102        &self,
103        request: GetPanoramicViewRequest,
104        auth: AuthType,
105    ) -> ApiResult<GetPanoramicViewResponse> {
106        Ok(self
107            .post(
108                &format!("{}/view/{}", request.project_key, request.view_id),
109                &request,
110                auth,
111            )
112            .await?)
113    }
114
115    async fn create_fix_view(
116        &self,
117        request: CreateFixViewRequest,
118        auth: AuthType,
119    ) -> ApiResult<CreateFixViewResponse> {
120        Ok(self
121            .post(
122                &format!(
123                    "{}/{}/fix_view",
124                    request.project_key, request.work_item_type_key
125                ),
126                &request,
127                auth,
128            )
129            .await?)
130    }
131
132    async fn update_fix_view(
133        &self,
134        request: UpdateFixViewRequest,
135        auth: AuthType,
136    ) -> ApiResult<UpdateFixViewResponse> {
137        Ok(self
138            .post(
139                &format!(
140                    "{}/{}/fix_view/{}",
141                    request.project_key, request.work_item_type_key, request.view_id
142                ),
143                &request,
144                auth,
145            )
146            .await?)
147    }
148
149    async fn create_condition_view(
150        &self,
151        request: CreateConditionViewRequest,
152        auth: AuthType,
153    ) -> ApiResult<CreateConditionViewResponse> {
154        Ok(self
155            .post("view/v1/create_condition_view", &request, auth)
156            .await?)
157    }
158
159    async fn update_condition_view(
160        &self,
161        request: UpdateConditionViewRequest,
162        auth: AuthType,
163    ) -> ApiResult<UpdateConditionViewResponse> {
164        Ok(self
165            .post("view/v1/update_condition_view", &request, auth)
166            .await?)
167    }
168
169    async fn delete_view(
170        &self,
171        request: DeleteViewRequest,
172        auth: AuthType,
173    ) -> ApiResult<DeleteViewResponse> {
174        Ok(self
175            .delete(
176                &format!("{}/fix_view/{}", request.project_key, request.view_id),
177                auth,
178            )
179            .await?)
180    }
181}