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, WorkflowTaskCreate,
19//! WorkflowTaskListQuery, 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 created = workflow_service
33//! .create_task(
34//! WorkflowTaskCreate::new("完成项目文档")
35//! .priority(3)
36//! .tasklist_guid("tasklist_guid"),
37//! )
38//! .await?;
39//!
40//! // 列取任务清单中的任务
41//! let tasks = workflow_service
42//! .list_tasks_all(WorkflowTaskListQuery::for_tasklist("tasklist_guid"))
43//! .await?;
44//!
45//! // 更新任务
46//! let result = workflow_service
47//! .mutate_task(
48//! &created.task_guid,
49//! WorkflowTaskMutation::new()
50//! .summary("完成项目文档")
51//! .priority(3),
52//! )
53//! .await?;
54//!
55//! // 处理待审批任务
56//! let approval_tasks = workflow_service
57//! .query_approval_tasks(
58//! ApprovalTaskQuery::new("ou_example_user", "1")
59//! .user_id_type("open_id")
60//! .status("Todo"),
61//! )
62//! .await?;
63//! if let Some(task) = approval_tasks.first() {
64//! let _ = workflow_service
65//! .approve_task(
66//! ApprovalTaskAction::new(
67//! task.approval_code.clone(),
68//! task.instance_code.clone(),
69//! "ou_example_user",
70//! task.task_id.clone(),
71//! )
72//! .user_id_type("open_id")
73//! .comment("同意"),
74//! )
75//! .await?;
76//! }
77//! # Ok(())
78//! # }
79//! ```
80
81mod service;
82
83// 通用模块
84/// 工作流通用工具、端点与模型。
85pub mod common;
86
87// 版本模块
88#[cfg(feature = "v1")]
89/// 任务 v1 API 模块。
90pub mod v1;
91
92#[cfg(feature = "v2")]
93/// 任务 v2 API 模块。
94pub mod v2;
95
96// 看板模块
97#[cfg(feature = "board")]
98/// 白板/看板模块。
99pub mod board;
100
101// 审批模块(v4 审批定义/实例/任务、外部审批)
102/// 审批 API 模块。
103pub mod approval;
104
105// Prelude 模块
106/// 常用工作流类型预导出模块。
107pub mod prelude;
108
109// 重新导出核心服务
110pub use service::{
111 ApprovalTaskAction, ApprovalTaskQuery, WorkflowService, WorkflowTaskCreate,
112 WorkflowTaskListQuery, WorkflowTaskMutation,
113};
114
115// 重新导出 approval v4 用户级接口类型(用户态,需 user_access_token)
116// 用户可直接 new() + builder + execute_with_options(option) 调用
117pub use service::{
118 AddCcInstanceBodyV4, AddCcInstanceRequestV4, AddCcInstanceResponseV4, AddSignTaskBodyV4,
119 AddSignTaskRequestV4, AddSignTaskResponseV4, DetailInstanceRequestV4, DetailInstanceResponseV4,
120 DetailInstanceTaskV4, ForwardTaskBodyV4, ForwardTaskRequestV4, ForwardTaskResponseV4,
121 InitiatedInstanceItemV4, InitiatedInstanceRequestV4, InitiatedInstanceResponseV4,
122 InstanceSummaryV4, ListTaskItemV4, ListTaskRequestV4, ListTaskResponseV4, PassTaskBodyV4,
123 PassTaskRequestV4, PassTaskResponseV4, RecallInstanceBodyV4, RecallInstanceRequestV4,
124 RecallInstanceResponseV4, RefuseTaskBodyV4, RefuseTaskRequestV4, RefuseTaskResponseV4,
125 RemindInstanceBodyV4, RemindInstanceRequestV4, RemindInstanceResponseV4, RollbackTaskBodyV4,
126 RollbackTaskRequestV4, RollbackTaskResponseV4, TaskSummaryV4,
127};
128
129/// 工作流服务客户端类型别名(统一命名为 `XxxClient`)。
130pub type WorkflowClient = WorkflowService;
131
132/// 工作流模块版本信息
133pub const VERSION: &str = env!("CARGO_PKG_VERSION");
134
135#[cfg(test)]
136#[allow(unused_imports)]
137mod tests {
138 use crate::VERSION;
139
140 #[test]
141 fn test_version() {
142 assert_ne!(VERSION, "");
143 }
144}
145
146#[cfg(test)]
147mod service_tests {
148 use super::*;
149 use openlark_core::config::Config;
150
151 fn create_test_config() -> Config {
152 Config::builder()
153 .app_id("test_app")
154 .app_secret("test_secret")
155 .build()
156 }
157
158 #[test]
159 fn test_workflow_service_creation() {
160 let config = create_test_config();
161 let service = WorkflowService::new(config);
162 // Service created successfully
163 let _ = service;
164 }
165
166 #[test]
167 fn test_workflow_service_clone() {
168 let config = create_test_config();
169 let service = WorkflowService::new(config);
170 let _cloned = service.clone();
171 }
172
173 #[cfg(feature = "v1")]
174 #[test]
175 fn test_workflow_service_v1() {
176 let config = create_test_config();
177 let service = WorkflowService::new(config);
178 let _v1 = service.v1();
179 }
180
181 #[cfg(feature = "v2")]
182 #[test]
183 fn test_workflow_service_v2() {
184 let config = create_test_config();
185 let service = WorkflowService::new(config);
186 let _v2 = service.v2();
187 }
188}