openlark_workflow/lib.rs
1//! # OpenLark 工作流模块
2//!
3//! OpenLark SDK 的工作流模块,提供飞书任务、审批和看板 API 的完整访问。
4//! Communication / Workflow helper 分层边界见 `docs/communication-workflow-helper-boundaries.md`。
5//!
6//! ## 功能特性
7//!
8//! - **任务管理**: 创建、更新、删除、查询待办事项
9//! - **审批流程**: 审批定义、审批实例管理,以及高频审批任务 helper
10//! - **看板管理**: 看板创建、任务卡片管理
11//! - **协作支持**: 添加执行者、关注者、提醒
12//! - **版本支持**: 支持 task v1/v2,以及 approval v4 helper 场景
13//!
14//! ## 使用示例
15//!
16//! ```rust,no_run
17//! use openlark_workflow::{
18//! ApprovalTaskAction, ApprovalTaskQuery, WorkflowService, WorkflowTaskListQuery,
19//! WorkflowTaskMutation,
20//! };
21//! use openlark_core::config::Config;
22//!
23//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
24//! let config = Config::builder()
25//! .app_id("your_app_id")
26//! .app_secret("your_app_secret")
27//! .build();
28//!
29//! let workflow_service = WorkflowService::new(config);
30//!
31//! // 列取任务清单中的任务
32//! let tasks = workflow_service
33//! .list_tasks_all(WorkflowTaskListQuery::for_tasklist("tasklist_guid"))
34//! .await?;
35//!
36//! // 更新任务
37//! let result = workflow_service
38//! .mutate_task(
39//! "task_guid",
40//! WorkflowTaskMutation::new()
41//! .summary("完成项目文档")
42//! .priority(3),
43//! )
44//! .await?;
45//!
46//! // 处理待审批任务
47//! let approval_tasks = workflow_service
48//! .query_approval_tasks(
49//! ApprovalTaskQuery::new("ou_example_user", "1")
50//! .user_id_type("open_id")
51//! .status("Todo"),
52//! )
53//! .await?;
54//! if let Some(task) = approval_tasks.first() {
55//! let _ = workflow_service
56//! .approve_task(
57//! ApprovalTaskAction::new(
58//! task.approval_code.clone(),
59//! task.instance_code.clone(),
60//! "ou_example_user",
61//! task.task_id.clone(),
62//! )
63//! .user_id_type("open_id")
64//! .comment("同意"),
65//! )
66//! .await?;
67//! }
68//! # Ok(())
69//! # }
70//! ```
71
72mod service;
73
74// 通用模块
75/// 工作流通用工具、端点与模型。
76pub mod common;
77
78// 版本模块
79#[cfg(feature = "v1")]
80/// 任务 v1 API 模块。
81pub mod v1;
82
83#[cfg(feature = "v2")]
84/// 任务 v2 API 模块。
85pub mod v2;
86
87// 看板模块
88#[cfg(feature = "board")]
89/// 白板/看板模块。
90pub mod board;
91
92// 审批模块(v4 审批定义/实例/任务、外部审批)
93/// 审批 API 模块。
94pub mod approval;
95
96// Prelude 模块
97/// 常用工作流类型预导出模块。
98pub mod prelude;
99
100// 重新导出核心服务
101pub use service::{
102 ApprovalTaskAction, ApprovalTaskQuery, WorkflowService, WorkflowTaskListQuery,
103 WorkflowTaskMutation,
104};
105
106// 重新导出 approval v4 用户级接口类型(用户态,需 user_access_token)
107// 用户可直接 new() + builder + execute_with_options(option) 调用
108pub use service::{
109 AddCcInstanceBodyV4, AddCcInstanceRequestV4, AddCcInstanceResponseV4, AddSignTaskBodyV4,
110 AddSignTaskRequestV4, AddSignTaskResponseV4, DetailInstanceRequestV4, DetailInstanceResponseV4,
111 DetailInstanceTaskV4, ForwardTaskBodyV4, ForwardTaskRequestV4, ForwardTaskResponseV4,
112 InitiatedInstanceItemV4, InitiatedInstanceRequestV4, InitiatedInstanceResponseV4,
113 InstanceSummaryV4, ListTaskItemV4, ListTaskRequestV4, ListTaskResponseV4, PassTaskBodyV4,
114 PassTaskRequestV4, PassTaskResponseV4, RecallInstanceBodyV4, RecallInstanceRequestV4,
115 RecallInstanceResponseV4, RefuseTaskBodyV4, RefuseTaskRequestV4, RefuseTaskResponseV4,
116 RemindInstanceBodyV4, RemindInstanceRequestV4, RemindInstanceResponseV4, RollbackTaskBodyV4,
117 RollbackTaskRequestV4, RollbackTaskResponseV4, TaskSummaryV4,
118};
119
120/// 工作流服务客户端类型别名(统一命名为 `XxxClient`)。
121pub type WorkflowClient = WorkflowService;
122
123/// 工作流模块版本信息
124pub const VERSION: &str = env!("CARGO_PKG_VERSION");
125
126#[cfg(test)]
127#[allow(unused_imports)]
128mod tests {
129 use crate::VERSION;
130
131 #[test]
132 fn test_version() {
133 assert_ne!(VERSION, "");
134 }
135}
136
137#[cfg(test)]
138mod service_tests {
139 use super::*;
140 use openlark_core::config::Config;
141
142 fn create_test_config() -> Config {
143 Config::builder()
144 .app_id("test_app")
145 .app_secret("test_secret")
146 .build()
147 }
148
149 #[test]
150 fn test_workflow_service_creation() {
151 let config = create_test_config();
152 let service = WorkflowService::new(config);
153 // Service created successfully
154 let _ = service;
155 }
156
157 #[test]
158 fn test_workflow_service_clone() {
159 let config = create_test_config();
160 let service = WorkflowService::new(config);
161 let _cloned = service.clone();
162 }
163
164 #[cfg(feature = "v1")]
165 #[test]
166 fn test_workflow_service_v1() {
167 let config = create_test_config();
168 let service = WorkflowService::new(config);
169 let _v1 = service.v1();
170 }
171
172 #[cfg(feature = "v2")]
173 #[test]
174 fn test_workflow_service_v2() {
175 let config = create_test_config();
176 let service = WorkflowService::new(config);
177 let _v2 = service.v2();
178 }
179}