1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5#[derive(Clone, Debug, Deserialize, Serialize)]
6pub struct Business {
7 pub id: String,
8 pub name: String,
9 pub project: String,
10 pub labels: Vec<String>,
11 pub role_owners: std::collections::HashMap<String, RoleOwner>,
12 pub watchers: Vec<String>,
13 pub order: i64,
14 pub super_masters: Vec<String>,
15 pub parent: String,
16 pub disabled: bool,
17 pub level_id: i64,
18 pub children: Option<Vec<Business>>,
19}
20
21#[derive(Clone, Debug, Deserialize, Serialize)]
22pub struct Comment {
23 pub id: i64,
24 pub work_item_id: i64,
25 pub work_item_type_key: String,
26 pub created_at: i64,
27 pub operator: String,
28 pub content: String,
29}
30
31#[derive(Clone, Debug, Deserialize, Serialize)]
32#[allow(non_snake_case)]
33pub struct CompInfo {
34 pub ID: String,
35 pub name: String,
36 pub ViewScopeKey: Option<String>,
37 pub WorkItemTypeKey: String,
38 pub ProjectKey: String,
39 pub CreatedBy: String,
40 pub CreatedAt: i64,
41 pub SearchHit: Vec<String>,
42}
43
44#[derive(Clone, Debug, Deserialize, Serialize)]
45pub struct ConfirmForm {
46 pub action: i64,
47 pub state_key: String,
48}
49
50#[derive(Clone, Debug, Deserialize, Serialize)]
51pub struct Connection {
52 pub source_state_key: String,
53 pub target_state_key: String,
54 pub transition_id: Option<i64>,
55}
56
57#[derive(Clone, Debug, Deserialize, Serialize)]
58pub struct DefaultValue {
59 pub default_appear: i64,
60 pub value: Option<Value>,
62}
63
64#[derive(Clone, Debug, Deserialize, Serialize)]
65pub struct Deliverable {
66 pub deliverable_uuid: String,
67 pub deliverable_type: String,
68 pub deliverable_info: DeliverableInfo,
69}
70
71#[derive(Clone, Debug, Deserialize, Serialize)]
72pub struct DeliverableInfo {
73 pub name: String,
74 pub work_item_id: i64,
75 pub associated_deliverables_template: i64,
76 pub template_resources: bool,
77 pub template_type: String,
78 pub deleted: bool,
79 pub delivery_related_info: DeliveryRelatedInfo,
80}
81
82#[derive(Clone, Debug, Deserialize, Serialize)]
83pub struct DeliveryRelatedInfo {
84 pub root_work_item: DeliveryRelatedInfoItem,
85 pub source_work_item: DeliveryRelatedInfoItem,
86}
87
88#[derive(Clone, Debug, Deserialize, Serialize)]
89pub struct DeliveryRelatedInfoItem {
90 pub project_key: String,
91 pub work_item_id: i64,
92 pub work_item_type_key: String,
93 pub name: String,
94}
95
96#[derive(Clone, Debug, Deserialize, Serialize)]
97pub struct ExPand {
98 pub need_workflow: Option<bool>,
99 pub need_multi_text: Option<bool>,
100 pub relation_fields_detail: Option<bool>,
101 pub need_union_deliverable: Option<bool>,
102 pub need_wbs_relation_chain_entity: Option<bool>,
103 pub need_wbs_relation_chain_path: Option<bool>,
104}
105
106#[derive(Clone, Debug, Deserialize, Serialize)]
107pub struct FieldConf {
108 pub is_required: i64,
109 pub is_visibility: i64,
110 pub is_validity: i64,
111 pub role_assign: Option<Vec<RoleAssign>>,
112 pub field_name: String,
113 pub field_key: String,
114 pub field_type_key: String,
115 pub default_value: Option<DefaultValue>,
116 pub label: Option<String>,
117 pub options: Option<Vec<OptionConf>>,
118 pub compound_fields: Option<Vec<FieldConf>>,
119}
120
121#[derive(Clone, Debug, Deserialize, Serialize)]
122pub struct FieldValue {
123 pub value: String,
124 pub label: String,
125 pub disabled: i64,
126 pub action: i64,
127 pub children: Vec<FieldValue>,
128 pub config_order: i64,
129 pub parent_value: String,
130}
131
132#[derive(Builder, Clone, Debug, Deserialize, Default, Serialize)]
133#[builder(setter(into, strip_option), default)]
134pub struct FieldValuePair {
135 pub field_key: Option<String>,
136 pub field_alias: Option<String>,
137 pub field_value: Value,
139 pub field_type_key: Option<String>,
140 pub target_state: Option<TargetState>,
141}
142
143#[derive(Clone, Debug, Deserialize, Serialize)]
144pub struct FinishhedInfo {
145 pub project_key: String,
146 pub work_item_id: i64,
147 pub finished_infos: Vec<FinishedInfoItem>,
148}
149
150#[derive(Clone, Debug, Deserialize, Serialize)]
151pub struct FinishedInfoItem {
152 pub node_id: String,
153 pub summary_mode: String,
154 pub opinion: Option<FinishedOpinionInfo>,
155 pub conclusion: Option<FinishedConclusionInfo>,
156}
157
158#[derive(Clone, Debug, Deserialize, Serialize)]
159pub struct FinishedOpinionInfo {
160 pub finished_opinion_result: Option<String>,
161 pub owners_finished_opinion_result: Option<Vec<FinishedOwnerOpinionInfo>>,
162}
163
164#[derive(Clone, Debug, Deserialize, Serialize)]
165pub struct FinishedConclusionOption {
166 pub node_id: String,
167 pub finished_conclusion_option: Vec<FinishedConclusionResultItem>,
168 pub finished_owners_conclusion_option: Vec<FinishedConclusionResultItem>,
169 pub finished_overall_conclusion_option: Vec<FinishedConclusionResultItem>,
170}
171
172#[derive(Clone, Debug, Deserialize, Serialize)]
173pub struct FinishedConclusionResultItem {
174 pub key: String,
175 pub label: String,
176 pub origin_label: String,
177}
178
179#[derive(Clone, Debug, Deserialize, Serialize)]
180pub struct FinishedOwnerOpinionInfo {
181 pub owner: String,
182 pub finished_opinion_result: Option<String>,
183}
184
185#[derive(Clone, Debug, Deserialize, Serialize)]
186pub struct FinishedConclusionInfo {
187 pub finished_conclusion_result: Option<FinishedConclusionInfoItem>,
188 pub owners_finished_conclusion_result: Option<Vec<FinishedOwnerConclusionInfo>>,
189}
190
191#[derive(Clone, Debug, Deserialize, Serialize)]
192pub struct FinishedConclusionInfoItem {
193 pub key: String,
194 pub label: String,
195 pub origin_label: String,
196}
197
198#[derive(Clone, Debug, Deserialize, Serialize)]
199pub struct FinishedOwnerConclusionInfo {
200 pub owner: String,
201 pub finished_conclusion_result: Option<FinishedConclusionInfoItem>,
202}
203
204#[derive(Clone, Debug, Deserialize, Serialize)]
205pub struct FixView {
206 pub view_id: String,
207 pub name: String,
208 pub created_by: String,
209 pub created_at: i64,
210 pub modified_by: String,
211 pub work_item_id_list: Vec<i64>,
212 pub editable: bool,
213}
214
215#[derive(Clone, Debug, Deserialize, Serialize)]
216pub struct MultiText {
217 pub field_key: String,
218 pub doc_text: MultiTextDetail,
219}
220
221#[derive(Clone, Debug, Deserialize, Serialize)]
222pub struct MultiTextDetail {
223 pub doc: Value, pub doc_text: Value, pub is_empty: bool,
226 pub notify_user_list: Vec<String>,
227 pub notify_user_type: String,
228}
229
230#[derive(Clone, Debug, Deserialize, Serialize)]
231pub struct MultiSignal {
232 pub status: String,
233 pub detail: Vec<MultiSignalDetail>,
234}
235
236#[derive(Clone, Debug, Deserialize, Serialize)]
237pub struct MultiSignalDetail {
238 pub id: String,
239 pub title: String,
240 pub status: String,
241 pub view_link: String,
242 pub query_link: QueryLink,
243}
244
245#[derive(Clone, Debug, Deserialize, Serialize)]
246pub struct NodeTask {
247 pub id: String,
248 pub state_key: String,
249 pub sub_tasks: Vec<SubTask>,
250}
251
252#[derive(Clone, Debug, Deserialize, Serialize)]
253pub struct NodeBasicInfo {
254 pub id: String,
255 pub name: String,
256 pub owners: Vec<String>,
257}
258
259#[derive(Clone, Debug, Deserialize, Serialize)]
260pub struct NodesConnections {
261 pub workflow_nodes: Option<Vec<WorkflowNode>>,
262 pub connections: Vec<Connection>,
263 pub state_flow_nodes: Option<Vec<StateFlowNode>>,
264}
265
266#[derive(Clone, Debug, Deserialize, Serialize)]
267pub struct FieldOption {
268 pub label: String,
269 pub value: String,
270 pub children: Option<Vec<FieldOption>>,
271}
272
273#[derive(Clone, Debug, Deserialize, Serialize)]
274pub struct OptionConf {
275 pub label: String,
276 pub value: String,
277 pub is_visibility: i64,
278 pub is_disabled: i64,
279 pub children: Option<Vec<OptionConf>>,
280}
281
282#[derive(Clone, Debug, Deserialize, Serialize)]
283pub struct PagedWorkItemIds {
284 pub work_item_ids: Vec<i64>,
285 pub page_num: i64,
286 pub page_size: i64,
287 pub total: i64,
288}
289
290#[derive(Clone, Debug, Deserialize, Serialize)]
291pub struct Project {
292 pub project_key: String,
293 pub name: String,
294 pub simple_name: String,
295 pub administrators: Vec<String>,
296}
297
298#[derive(Clone, Debug, Deserialize, Serialize)]
299pub struct ProjectRelationInstance {
300 pub work_item_id: i64,
301 pub work_item_name: String,
302 pub instances: Vec<RelationInstance>,
303}
304
305#[derive(Clone, Debug, Deserialize, Serialize)]
306pub struct ProjectRelationRule {
307 pub remote_project_key: String,
308 pub remote_project_name: String,
309 pub rules: Vec<RelationRule>,
310}
311
312#[derive(Clone, Debug, Deserialize, Serialize)]
313pub struct QueryLink {
314 pub url: String,
315 pub method: String,
316 pub headers: Value,
318 pub body: Value,
320 pub params: Value,
322}
323
324#[derive(Clone, Debug, Deserialize, Serialize)]
325pub struct RoleOwner {
326 pub role: String,
327 pub name: Option<String>,
328 pub owners: Vec<String>,
329}
330
331#[derive(Clone, Debug, Deserialize, Serialize)]
332pub struct RoleAssign {
333 pub role: String,
334 pub name: String,
335 pub default_appear: i64,
336 pub deletable: i64,
337 pub member_assign: i64,
338 pub members: Option<Vec<String>>,
339}
340
341#[derive(Clone, Debug, Deserialize, Serialize)]
342pub struct RoleConfDetail {
343 pub id: String,
344 pub name: String,
345 pub is_owner: bool,
346 pub role_appear_mode: i64,
347 pub deletable: bool,
348 pub auto_enter_group: bool,
349 pub member_assign_mode: i64,
350 pub members: Option<Vec<String>>,
351 pub is_member_multi: bool,
352}
353
354#[derive(Clone, Debug, Deserialize, Serialize)]
355pub struct RelationRule {
356 pub id: String,
357 pub name: String,
358 pub disabled: i64,
359 pub work_item_relation_id: String,
360 pub work_item_relation_name: String,
361 pub current_work_item_type_key: String,
362 pub current_work_item_type_name: String,
363 pub remote_work_item_type_key: String,
364 pub remote_work_item_type_name: String,
365 pub chat_group_merge: i64,
366}
367
368#[derive(Builder, Clone, Debug, Deserialize, Default, Serialize)]
369#[builder(setter(into, strip_option), default)]
370pub struct RelationDetail {
371 pub work_item_type_key: String,
372 pub work_item_type_name: Option<String>,
373 pub project_key: String,
374 pub project_name: Option<String>,
375}
376
377#[derive(Clone, Debug, Deserialize, Serialize)]
378pub struct RelationInstance {
379 pub relation_work_item_id: i64,
380 pub relation_work_item_name: String,
381 pub relation_work_item_type_name: String,
382 pub relation_work_item_type_key: String,
383 pub project_relation_rule_id: String,
384 pub project_relation_rule_name: String,
385 pub relation_project_key: String,
386 pub relation_project_name: String,
387}
388
389#[derive(Clone, Debug, Deserialize, Serialize)]
390pub struct RelationBindInstance {
391 pub work_item_id: i64,
392 pub chat_group_merge: i64,
393}
394
395#[derive(Builder, Clone, Debug, Deserialize, Default, Serialize)]
396#[builder(setter(into, strip_option), default)]
397pub struct Schedule {
398 pub owners: Option<Vec<String>>,
399 pub estimate_start_date: Option<i64>,
400 pub estimate_end_date: Option<i64>,
401 pub points: Option<f64>,
402 pub is_auto: Option<bool>,
403 pub actual_work_time: Option<f64>,
404}
405
406#[derive(Clone, Debug, Deserialize, Serialize)]
407pub struct SearchUser {
408 pub user_keys: Vec<String>,
409 pub field_key: String,
410 pub role: String,
411}
412
413#[derive(Clone, Debug, Default, Deserialize, Serialize)]
414pub struct SearchParam {
415 pub param_key: String,
416 pub value: Value,
418 pub operator: String,
419}
420
421#[derive(Clone, Debug, Default, Deserialize, Serialize)]
422pub struct SearchGroup {
423 pub search_params: Vec<SearchParam>,
424 pub conjunction: String,
425 pub search_groups: Vec<SearchGroup>,
426}
427
428#[derive(Clone, Debug, Deserialize, Serialize)]
429pub struct SimpleField {
430 pub field_key: String,
431 pub field_alias: String,
432 pub field_type_key: String,
433 pub field_name: String,
434 pub is_custom_field: bool,
435 pub options: Option<Vec<FieldOption>>,
436 pub relation_id: Option<String>,
437 pub compound_fields: Option<Vec<SimpleField>>,
438}
439
440#[derive(Clone, Debug, Deserialize, Serialize)]
441pub struct SubTask {
442 pub id: String,
443 pub name: String,
444 pub schedules: Option<Vec<Schedule>>,
445 pub order: Option<f64>,
446 pub passed: Option<bool>,
447 pub owners: Option<Vec<String>>,
448 pub note: Option<String>,
449 pub actual_begin_time: Option<String>,
450 pub actual_finish_time: Option<String>,
451 pub assignee: Option<Vec<String>>,
452 pub role_assignee: Option<Vec<RoleOwner>>,
453 pub deliverable: Option<Vec<FieldValuePair>>,
454 pub fields: Option<Vec<FieldValuePair>>,
455}
456
457#[derive(Clone, Debug, Deserialize, Serialize)]
458pub struct SubStatus {
459 pub checked_time: i64,
460 pub owner: String,
461 pub status: i64,
462}
463
464#[derive(Clone, Debug, Deserialize, Serialize)]
465pub struct SubDetail {
466 pub work_item_id: i64,
467 pub work_item_name: String,
468 pub node_id: String,
469 pub sub_task: SubTask,
470}
471
472#[derive(Clone, Debug, Deserialize, Serialize)]
473pub struct StateTime {
474 pub state_key: String,
475 pub start_time: i64,
476 pub end_time: i64,
477 pub name: String,
478}
479
480#[derive(Clone, Debug, Deserialize, Serialize)]
481pub struct StateFlowConf {
482 pub state_key: String,
483 pub name: String,
484 pub state_type: i64,
485 pub authorized_roles: Vec<String>,
486}
487
488#[derive(Clone, Debug, Deserialize, Serialize)]
489pub struct StateFlowNode {
490 pub id: String,
491 pub name: String,
492 pub status: i64,
493 pub owners: Option<Vec<RoleOwner>>,
494 pub fields: Option<Vec<FieldValuePair>>,
495 pub actual_begin_time: String,
496 pub actual_finish_time: String,
497}
498
499#[derive(Clone, Debug, Deserialize, Serialize)]
500pub struct TargetState {
501 pub state_key: String,
502 pub transition_id: i64,
503}
504
505#[derive(Clone, Debug, Deserialize, Serialize)]
506pub struct TaskConf {
507 pub action: i64,
508 pub name: String,
509 pub id: String,
510 pub deliverable_field_id: String,
511 pub pass_mode: i64,
512 pub node_pass_required_mode: i64,
513}
514
515#[derive(Clone, Debug, Deserialize, Serialize)]
516pub struct Team {
517 pub team_id: i64,
518 pub team_name: String,
519 pub user_keys: Vec<String>,
520 pub administrators: Vec<String>,
521}
522
523#[derive(Clone, Debug, Deserialize, Serialize)]
524pub struct TemplateDetail {
525 pub workflow_confs: Option<Vec<WorkflowConf>>,
526 pub state_flow_confs: Option<Vec<StateFlowConf>>,
527 pub connections: Option<Vec<Connection>>,
528 pub template_id: i64,
529 pub template_name: String,
530 pub version: i64,
531 pub is_disabled: i64,
532}
533
534#[derive(Clone, Debug, Deserialize, Serialize)]
535pub struct TemplateConf {
536 pub template_id: String,
537 pub template_name: String,
538 pub is_disabled: i64,
539 pub version: i64,
540}
541
542#[derive(Clone, Debug, Deserialize, Serialize)]
543pub struct TimeInterval {
544 pub start: i64,
545 pub end: i64,
546}
547
548#[derive(Clone, Debug, Deserialize, Serialize)]
549pub struct ViewConf {
550 pub view_id: String,
551 pub view_url: String,
552 pub name: String,
553 pub view_type: i64,
554 pub auth: i64,
555 pub system_view: i64,
556 pub collaborators: Vec<String>,
557 pub created_at: i64,
558 pub created_by: String,
559}
560
561#[derive(Clone, Debug, Deserialize, Serialize)]
562pub struct WBSWorkItem {
563 pub node_uuid: String,
564 pub work_item_id: i64,
565 pub r#type: String,
566 pub wbs_status: String,
567 pub sub_work_item: Vec<WBSWorkItem>,
568 pub name: String,
569 pub deliverable: Vec<FieldValuePair>,
570 pub wbs_status_map: std::collections::HashMap<String, String>,
571 pub schedule: Schedule,
572 pub schedules: Option<Vec<Schedule>>,
573 pub points: f64,
574 pub role_owners: Option<Vec<RoleOwner>>,
575 pub union_deliverable: UnionDeliverable,
576}
577
578#[derive(Clone, Debug, Deserialize, Serialize)]
579pub struct UnionDeliverable {
580 pub field_deliverables: Vec<FieldDeliverableItem>,
581 pub instance_deliverables: Vec<InstanceDeliverableItem>,
582}
583
584#[derive(Clone, Debug, Deserialize, Serialize)]
585pub struct FieldDeliverableItem {
586 pub field_info: FieldValuePair,
587 pub placeholder: String,
588 pub remark: String,
589 pub status: i64,
590}
591
592#[derive(Clone, Debug, Deserialize, Serialize)]
593pub struct InstanceDeliverableItem {
594 pub name: String,
595 pub work_item_id: i64,
596 pub deletable: bool,
597 pub must_complete: bool,
598 pub state_key: String,
599 pub state_name: String,
600 pub owners: Option<Vec<String>>,
601 pub remark: String,
602}
603
604#[derive(Clone, Debug, Deserialize, Serialize)]
605pub struct WbsViewResponse {
606 pub template_key: String,
607 pub related_sub_work_items: Vec<WBSWorkItem>,
608 pub relation_chain_path: WBSRelationChainPath,
609 pub relation_chain_entity: WBSRelationChainEntity,
610}
611
612#[derive(Clone, Debug, Deserialize, Serialize)]
613pub struct WBSRelationChainPath {
614 pub workitem_id: i64,
615 pub wbs_relation_chain_path: Vec<WBSRelationChainPathItem>,
616}
617
618#[derive(Clone, Debug, Deserialize, Serialize)]
619pub struct WBSRelationChainPathItem {
620 pub project_key: String,
621 pub workitem_type_key: String,
622 pub r#type: String,
623 pub name: String,
624 pub level: i64,
625 pub node_name: String,
626}
627
628#[derive(Clone, Debug, Deserialize, Serialize)]
629pub struct WBSRelationChainEntity {
630 pub workitem_id: i64,
631 pub wbs_relation_chain_entity: Vec<WBSRelationChainEntityItem>,
632}
633
634#[derive(Clone, Debug, Deserialize, Serialize)]
635pub struct WBSRelationChainEntityItem {
636 pub project_key: String,
637 pub workitem_type_key: String,
638 pub workitem_id: i64,
639 pub r#type: String,
640 pub workitem_name: String,
641 pub state_key: String,
642 pub node_name: String,
643 pub sub_task_name: String,
644 pub sub_task_id: i64,
645 pub level: i64,
646}
647
648#[derive(Clone, Debug, Deserialize, Serialize)]
649pub enum WFStateStatus {
650 Unreach = 1, Reached = 2, Passed = 3, }
654
655#[derive(Clone, Debug, Deserialize, Serialize)]
656pub struct WorkflowConf {
657 pub action: Option<i64>,
658 pub state_key: String,
659 pub name: String,
660 pub tags: Option<Vec<String>>,
661 pub pre_node_state_key: Option<Vec<String>>,
662 pub owner_usage_mode: Option<i64>,
663 pub owner_roles: Option<Vec<String>>,
664 pub owners: Option<Vec<String>>,
665 pub need_schedule: Option<bool>,
666 pub different_schedule: Option<bool>,
667 pub visibility_usage_mode: Option<i64>,
668 pub completion_tips: Option<String>,
669 pub deletable: Option<bool>,
670 pub deletable_operation_role: Option<Vec<String>>,
671 pub pass_mode: Option<i64>,
672 pub is_limit_node: Option<bool>,
673 pub done_operation_role: Option<Vec<String>>,
674 pub done_schedule: Option<bool>,
675 pub done_allocate_owner: Option<bool>,
676 pub task_confs: Option<Vec<TaskConf>>,
677}
678
679#[derive(Clone, Debug, Deserialize, Serialize)]
680pub struct WorkItemInfo {
681 pub id: i64,
682 pub name: String,
683 pub work_item_type_key: String,
684 pub project_key: String,
685 pub template_id: i64,
686 pub template_type: String,
687 pub pattern: String,
688 pub sub_stage: String,
689 pub current_nodes: Option<Vec<NodeBasicInfo>>,
690 pub created_by: String,
691 pub updated_by: String,
692 pub deleted_by: String,
693 pub created_at: i64,
694 pub updated_at: i64,
695 pub deleted_at: i64,
696 pub fields: Vec<FieldValuePair>,
697 pub work_item_status: WorkItemStatus,
698}
699
700#[derive(Clone, Debug, Deserialize, Serialize)]
701pub struct WorkItemKeyType {
702 pub type_key: String,
703 pub name: String,
704 pub api_name: String,
705 pub is_disable: i64,
706}
707
708#[derive(Clone, Debug, Deserialize, Serialize)]
709pub struct WorkflowNode {
710 pub id: String,
711 pub state_key: String,
712 pub name: String,
713 pub status: i64,
714 pub fields: Option<Vec<FieldValuePair>>,
715 pub owners: Option<Vec<String>>,
716 pub node_schedule: Option<Schedule>,
717 pub schedules: Option<Vec<Schedule>>,
718 pub sub_tasks: Option<Vec<SubTask>>,
719 pub actual_begin_time: Option<String>,
720 pub actual_finish_time: Option<String>,
721 pub role_assignee: Option<Vec<RoleOwner>>,
722}
723
724#[derive(Clone, Debug, Deserialize, Serialize)]
725pub struct WorkItemRelation {
726 pub id: String,
727 pub name: String,
728 pub disabled: bool,
729 pub work_item_type_key: String,
730 pub work_item_type_name: String,
731 pub relation_details: Vec<RelationDetail>,
732 pub relation_type: i64,
733}
734
735#[derive(Clone, Debug, Deserialize, Serialize)]
736pub struct WorkItemStatus {
737 pub state_key: String,
738 pub is_archived_state: bool,
739 pub is_init_state: bool,
740 pub updated_at: i64,
741 pub updated_by: String,
742}
743
744#[derive(Builder, Clone, Debug, Default, Serialize)]
745#[builder(setter(into, strip_option))]
746#[builder(default)]
747pub struct CreateWorkingHourRecord {
748 pub resource_type: String,
749 pub resource_id: String,
750 pub work_time: i64,
751 pub work_description: String,
752}
753
754#[derive(Builder, Clone, Debug, Default, Serialize)]
755#[builder(setter(into, strip_option))]
756#[builder(default)]
757pub struct UpdateWorkingHourRecord {
758 pub id: i64,
759 pub work_time: i64,
760 pub work_description: String,
761}