meegle/field/
api.rs

1use super::types::*;
2use crate::client::{AuthType, Client};
3use crate::error::ApiResult;
4
5pub trait FieldApi {
6    /// 获取指定空间或工作项类型下所有"字段"的基础信息
7    /// 
8    /// # Arguments
9    /// * `project_key` - 空间id(project_key)或者空间域名(simple_name)
10    /// * `request` - 请求参数,可指定工作项类型
11    /// * `auth` - 认证信息
12    fn list_fields(
13        &self,
14        project_key: &str,
15        request: ListFieldsRequest,
16        auth: AuthType,
17    ) -> impl std::future::Future<Output = ApiResult<ListFieldsResponse>> + Send;
18
19    /// 在指定工作项类型下创建一个新的"自定义字段"
20    /// 
21    /// # Arguments
22    /// * `project_key` - 空间id或域名
23    /// * `work_item_type_key` - 工作项类型,如 "story"(需求)
24    /// * `request` - 创建字段的详细信息
25    /// * `auth` - 认证信息
26    fn create_field(
27        &self,
28        project_key: &str,
29        work_item_type_key: &str,
30        request: CreateFieldRequest,
31        auth: AuthType,
32    ) -> impl std::future::Future<Output = ApiResult<CreateFieldResponse>> + Send;
33
34    /// 更新指定自定义字段的配置信息
35    /// 
36    /// # Arguments
37    /// * `project_key` - 空间id或域名
38    /// * `work_item_type_key` - 工作项类型
39    /// * `request` - 更新字段的详细信息
40    /// * `auth` - 认证信息
41    fn update_field(
42        &self,
43        project_key: &str,
44        work_item_type_key: &str,
45        request: UpdateFieldRequest,
46        auth: AuthType,
47    ) -> impl std::future::Future<Output = ApiResult<UpdateFieldResponse>> + Send;
48}
49
50impl FieldApi for Client {
51    async fn list_fields(
52        &self,
53        project_key: &str,
54        request: ListFieldsRequest,
55        auth: AuthType,
56    ) -> ApiResult<ListFieldsResponse> {
57        Ok(self
58            .post(&format!("{}/field/all", project_key), request, auth)
59            .await?)
60    }
61
62    async fn create_field(
63        &self,
64        project_key: &str,
65        work_item_type_key: &str,
66        request: CreateFieldRequest,
67        auth: AuthType,
68    ) -> ApiResult<CreateFieldResponse> {
69        Ok(self
70            .post(
71                &format!("{}/field/{}/create", project_key, work_item_type_key),
72                request,
73                auth,
74            )
75            .await?)
76    }
77
78    async fn update_field(
79        &self,
80        project_key: &str,
81        work_item_type_key: &str,
82        request: UpdateFieldRequest,
83        auth: AuthType,
84    ) -> ApiResult<UpdateFieldResponse> {
85        Ok(self
86            .put(
87                &format!("{}/field/{}", project_key, work_item_type_key),
88                request,
89                auth,
90            )
91            .await?)
92    }
93}