1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use crate::structs::{
6 CompInfo, ExPand, FieldConf, FieldValuePair, SearchGroup, SearchUser, WorkItemInfo,
7 WorkItemStatus,
8};
9
10#[derive(Builder, Debug, Default, Serialize)]
11#[builder(setter(into, strip_option))]
12#[builder(default)]
13pub struct FilterWorkItemsInProjectRequest {
14 pub work_item_name: Option<String>,
15 pub user_keys: Option<Vec<String>>,
16 pub work_item_type_keys: Vec<String>,
17 pub work_item_ids: Option<Vec<String>>,
18 pub created_at: Option<i64>,
19 pub updated_at: Option<i64>,
20 pub sub_stages: Option<Vec<String>>,
21 pub work_item_status: Option<Vec<WorkItemStatus>>,
22 pub businesses: Option<Vec<String>>,
23 pub priorities: Option<Vec<String>>,
24 pub tags: Option<Vec<String>>,
25 pub search_id: Option<String>,
26 pub page_size: Option<i64>,
27 pub page_num: Option<i64>,
28 pub expand: Option<ExPand>,
29}
30
31pub type FilterWorkItemsInProjectResponse = Vec<WorkItemInfo>;
32
33#[derive(Builder, Debug, Default, Serialize)]
34#[builder(setter(into, strip_option))]
35#[builder(default)]
36pub struct FilterWorkItemsAcrossProjectsRequest {
37 pub project_keys: Option<Vec<String>>,
38 pub simple_names: Option<Vec<String>>,
39 pub work_item_type_key: String,
40 pub work_item_name: Option<String>,
41 pub search_user: Option<SearchUser>,
42 pub work_item_ids: Option<Vec<String>>,
43 pub created_at: Option<i64>,
44 pub updated_at: Option<i64>,
45 pub work_item_status: Option<Vec<WorkItemStatus>>,
46 pub businesses: Option<Vec<String>>,
47 pub priorities: Option<Vec<String>>,
48 pub tags: Option<Vec<String>>,
49 pub template_ids: Option<Vec<i64>>,
50 pub page_size: Option<i64>,
51 pub page_num: Option<i64>,
52 pub expand: Option<ExPand>,
53}
54
55pub type FilterWorkItemsAcrossProjectsResponse = Vec<WorkItemInfo>;
56
57#[derive(Builder, Debug, Default, Serialize)]
58#[builder(setter(into, strip_option))]
59#[builder(default)]
60pub struct SearchWorkItemsInProjectRequest {
61 pub search_group: SearchGroup,
62 pub page_size: Option<i64>,
63 pub page_num: Option<i64>,
64 pub fields: Option<Vec<String>>,
65 pub expand: Option<ExPand>,
66}
67
68pub type SearchWorkItemsInProjectResponse = Vec<WorkItemInfo>;
69
70#[derive(Builder, Debug, Default, Serialize)]
71#[builder(setter(into, strip_option))]
72#[builder(default)]
73pub struct CompositiveSearchRequest {
74 pub project_keys: Option<Vec<String>>,
75 pub simple_names: Option<Vec<String>>,
76 pub query_type: String,
77 pub query_sub_type: Option<Vec<String>>,
78 pub query: String,
79 pub page_size: Option<i32>,
80 pub page_num: Option<i32>,
81}
82
83pub type CompositiveSearchResponse = Vec<CompInfo>;
84
85#[derive(Builder, Debug, Default, Serialize)]
86#[builder(setter(into, strip_option))]
87#[builder(default)]
88pub struct SearchWorkItemsByRelationRequest {
89 pub relation_work_item_type_key: String,
90 pub relation_key: String,
91 pub relation_type: Option<i32>,
92 pub page_size: Option<i32>,
93 pub page_num: Option<i32>,
94}
95
96pub type SearchWorkItemsByRelationResponse = Vec<WorkItemInfo>;
97
98#[derive(Builder, Debug, Default, Serialize)]
99#[builder(setter(into, strip_option))]
100#[builder(default)]
101pub struct GetWorkItemDetailsRequest {
102 pub work_item_ids: Vec<i64>,
103 pub fields: Option<Vec<String>>,
104 pub expand: Option<ExPand>,
105}
106
107pub type GetWorkItemDetailsResponse = Vec<WorkItemInfo>;
108
109pub type GetWorkItemMetaResponse = Vec<FieldConf>;
110
111#[derive(Builder, Debug, Default, Serialize)]
112#[builder(setter(into, strip_option))]
113#[builder(default)]
114pub struct CreateWorkItemRequest {
115 pub work_item_type_key: String,
116 pub name: Option<String>,
117 pub field_value_pairs: Option<Vec<FieldValuePair>>,
118 pub template_id: Option<i64>,
119}
120
121pub type CreateWorkItemResponse = i64;
122
123#[derive(Builder, Debug, Default, Serialize)]
124#[builder(setter(into, strip_option))]
125#[builder(default)]
126pub struct UpdateWorkItemRequest {
127 pub update_fields: Vec<FieldValuePair>,
128}
129
130pub type UpdateWorkItemResponse = Value;
131
132#[derive(Builder, Debug, Default, Serialize)]
133#[builder(setter(into, strip_option))]
134#[builder(default)]
135pub struct BatchUpdateWorkItemRequest {
136 pub project_key: String,
137 pub work_item_ids: Vec<i64>,
138 pub work_item_type_key: String,
139 pub update_mode: String,
140 pub field_key: String,
141 pub before_field_value: Option<serde_json::Value>,
142 pub after_field_value: serde_json::Value,
143}
144
145#[derive(Debug, Deserialize)]
146pub struct BatchUpdateWorkItemResponse {
147 pub task_id: String,
148}
149
150#[derive(Debug, Deserialize)]
151pub struct TaskResultResponse {
152 pub total: i64,
153 pub success_total: i64,
154 pub error_total: i64,
155 pub success_sub_task_list: Vec<String>,
156 pub fail_sub_task_list: Vec<String>,
157 pub error_scenes: Option<Vec<String>>,
158 pub task_id: String,
159 pub task_status: String,
160}
161
162#[derive(Builder, Debug, Default, Serialize)]
163#[builder(setter(into, strip_option))]
164#[builder(default)]
165pub struct BatchQueryDeliverableRequest {
166 pub project_key: String,
167 pub work_item_ids: Vec<i64>,
168}
169
170pub type BatchQueryDeliverableResponse = Vec<crate::structs::Deliverable>;
171
172#[derive(Builder, Debug, Default, Serialize)]
173#[builder(setter(into, strip_option))]
174#[builder(default)]
175pub struct AbortWorkItemRequest {
176 pub is_aborted: bool,
177 pub reason: String,
178}
179
180pub type AbortWorkItemResponse = Value;
181
182#[derive(Builder, Debug, Default, Serialize)]
183#[builder(setter(into, strip_option))]
184#[builder(default)]
185pub struct FreezeWorkItemRequest {
186 pub project_key: String,
187 pub work_item_id: i64,
188 pub is_frozen: bool,
189}
190
191pub type FreezeWorkItemResponse = Value;
192
193#[derive(Builder, Debug, Default, Serialize)]
194#[builder(setter(into, strip_option))]
195#[builder(default)]
196pub struct GetWorkItemOperationRecordRequest {
197 pub project_key: String,
198 pub work_item_ids: Vec<i64>,
199 pub start_from: Option<String>,
200 pub page_size: Option<i64>,
201 pub operator_type: Option<Vec<String>>,
202 pub operator: Option<Vec<String>>,
203 pub source_type: Option<Vec<String>>,
204 pub source: Option<Vec<String>>,
205 pub operation_type: Option<Vec<String>>,
206 pub start: Option<i64>,
207 pub end: Option<i64>,
208 pub op_record_module: Option<Vec<String>>,
209}
210
211#[derive(Debug, Deserialize)]
212pub struct RecordContent {
213 pub object: Value,
214 pub old: Vec<Value>,
215 pub new: Vec<Value>,
216 pub add: Vec<Value>,
217 pub delete: Vec<Value>,
218}
219
220#[derive(Debug, Deserialize)]
221pub struct OperationRecord {
222 pub project_key: String,
223 pub operation_type: String,
224 pub operator_type: String,
225 pub operator: String,
226 pub op_record_module: String,
227 pub record_contents: Vec<RecordContent>,
228 pub operation_time: i64,
229 pub work_item_id: i64,
230}
231
232#[derive(Debug, Deserialize)]
233pub struct GetWorkItemOperationRecordResponse {
234 pub has_more: bool,
235 pub start_from: String,
236 pub op_records: Vec<OperationRecord>,
237}