Skip to main content

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}