meegle/project_relation/
api.rs1use super::types::*;
2use crate::client::{AuthType, Client};
3use crate::error::ApiResult;
4use serde_json;
5
6pub trait ProjectRelationApi {
7 fn get_project_relation_rules(
10 &self,
11 request: GetProjectRelationRulesRequest,
12 auth: AuthType,
13 ) -> impl std::future::Future<Output = ApiResult<GetProjectRelationRulesResponse>> + Send;
14
15 fn get_relation_instances(
18 &self,
19 request: GetRelationInstancesRequest,
20 auth: AuthType,
21 ) -> impl std::future::Future<Output = ApiResult<GetRelationInstancesResponse>> + Send;
22
23 fn batch_bind_relation(
26 &self,
27 request: BatchBindRelationRequest,
28 auth: AuthType,
29 ) -> impl std::future::Future<Output = ApiResult<BatchBindRelationResponse>> + Send;
30
31 fn unbind_relation(
34 &self,
35 request: UnbindRelationRequest,
36 auth: AuthType,
37 ) -> impl std::future::Future<Output = ApiResult<UnbindRelationResponse>> + Send;
38}
39
40impl ProjectRelationApi for Client {
41 async fn get_project_relation_rules(
42 &self,
43 request: GetProjectRelationRulesRequest,
44 auth: AuthType,
45 ) -> ApiResult<GetProjectRelationRulesResponse> {
46 Ok(self
47 .post(
48 &format!("{}/relation/rules", request.project_key),
49 &request,
50 auth,
51 )
52 .await?)
53 }
54
55 async fn get_relation_instances(
56 &self,
57 request: GetRelationInstancesRequest,
58 auth: AuthType,
59 ) -> ApiResult<GetRelationInstancesResponse> {
60 Ok(self
61 .post(
62 &format!(
63 "{}/relation/{}/{}/work_item_list",
64 request.project_key, request.work_item_type_key, request.work_item_id
65 ),
66 &request,
67 auth,
68 )
69 .await?)
70 }
71
72 async fn batch_bind_relation(
73 &self,
74 request: BatchBindRelationRequest,
75 auth: AuthType,
76 ) -> ApiResult<BatchBindRelationResponse> {
77 let BatchBindRelationRequest {
78 project_key,
79 work_item_type_key,
80 work_item_id,
81 instances,
82 relation_rule_id,
83 } = request;
84
85 Ok(self
86 .post(
87 &format!(
88 "{}/relation/{}/{}/batch_bind",
89 project_key, work_item_type_key, work_item_id
90 ),
91 &serde_json::json!({
92 "instances": instances,
93 "relation_rule_id": relation_rule_id
94 }),
95 auth,
96 )
97 .await?)
98 }
99
100 async fn unbind_relation(
101 &self,
102 request: UnbindRelationRequest,
103 auth: AuthType,
104 ) -> ApiResult<UnbindRelationResponse> {
105 Ok(self
106 .delete_with_body(
107 &format!(
108 "{}/relation/{}/{}",
109 request.project_key, request.work_item_type_key, request.work_item_id
110 ),
111 &request,
112 auth,
113 )
114 .await?)
115 }
116}