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, 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}