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// Prelude 模块
93/// 常用工作流类型预导出模块。
94pub mod prelude;
95
96// 重新导出核心服务
97pub use service::{
98    ApprovalTaskAction, ApprovalTaskQuery, WorkflowService, WorkflowTaskListQuery,
99    WorkflowTaskMutation,
100};
101
102/// 工作流服务客户端类型别名(统一命名为 `XxxClient`)。
103pub type WorkflowClient = WorkflowService;
104
105/// 工作流模块版本信息
106pub const VERSION: &str = env!("CARGO_PKG_VERSION");
107
108#[cfg(test)]
109#[allow(unused_imports)]
110mod tests {
111    use crate::VERSION;
112
113    #[test]
114    fn test_version() {
115        assert_ne!(VERSION, "");
116    }
117}
118
119#[cfg(test)]
120mod service_tests {
121    use super::*;
122    use openlark_core::config::Config;
123
124    fn create_test_config() -> Config {
125        Config::builder()
126            .app_id("test_app")
127            .app_secret("test_secret")
128            .build()
129    }
130
131    #[test]
132    fn test_workflow_service_creation() {
133        let config = create_test_config();
134        let service = WorkflowService::new(config);
135        // Service created successfully
136        let _ = service;
137    }
138
139    #[test]
140    fn test_workflow_service_clone() {
141        let config = create_test_config();
142        let service = WorkflowService::new(config);
143        let _cloned = service.clone();
144    }
145
146    #[cfg(feature = "v1")]
147    #[test]
148    fn test_workflow_service_v1() {
149        let config = create_test_config();
150        let service = WorkflowService::new(config);
151        let _v1 = service.v1();
152    }
153
154    #[cfg(feature = "v2")]
155    #[test]
156    fn test_workflow_service_v2() {
157        let config = create_test_config();
158        let service = WorkflowService::new(config);
159        let _v2 = service.v2();
160    }
161
162    #[cfg(feature = "v2")]
163    #[test]
164    fn test_workflow_service_task() {
165        let config = create_test_config();
166        let service = WorkflowService::new(config);
167        let _task = service.task();
168    }
169
170    #[cfg(feature = "v2")]
171    #[test]
172    fn test_workflow_service_tasklist() {
173        let config = create_test_config();
174        let service = WorkflowService::new(config);
175        let _tasklist = service.tasklist();
176    }
177}