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/// 工作流模块版本信息
103pub const VERSION: &str = env!("CARGO_PKG_VERSION");
104
105#[cfg(test)]
106#[allow(unused_imports)]
107mod tests {
108    use crate::VERSION;
109
110    #[test]
111    fn test_version() {
112        assert_ne!(VERSION, "");
113    }
114}
115
116#[cfg(test)]
117mod service_tests {
118    use super::*;
119    use openlark_core::config::Config;
120
121    fn create_test_config() -> Config {
122        Config::builder()
123            .app_id("test_app")
124            .app_secret("test_secret")
125            .build()
126    }
127
128    #[test]
129    fn test_workflow_service_creation() {
130        let config = create_test_config();
131        let service = WorkflowService::new(config);
132        // Service created successfully
133        let _ = service;
134    }
135
136    #[test]
137    fn test_workflow_service_clone() {
138        let config = create_test_config();
139        let service = WorkflowService::new(config);
140        let _cloned = service.clone();
141    }
142
143    #[cfg(feature = "v1")]
144    #[test]
145    fn test_workflow_service_v1() {
146        let config = create_test_config();
147        let service = WorkflowService::new(config);
148        let _v1 = service.v1();
149    }
150
151    #[cfg(feature = "v2")]
152    #[test]
153    fn test_workflow_service_v2() {
154        let config = create_test_config();
155        let service = WorkflowService::new(config);
156        let _v2 = service.v2();
157    }
158
159    #[cfg(feature = "v2")]
160    #[test]
161    fn test_workflow_service_task() {
162        let config = create_test_config();
163        let service = WorkflowService::new(config);
164        let _task = service.task();
165    }
166
167    #[cfg(feature = "v2")]
168    #[test]
169    fn test_workflow_service_tasklist() {
170        let config = create_test_config();
171        let service = WorkflowService::new(config);
172        let _tasklist = service.tasklist();
173    }
174}