openlark_workflow/v2/tasklist/activity_subscription/
patch.rs1use crate::common::{api_endpoints::TaskApiV2, api_utils::*};
6use crate::v2::tasklist::activity_subscription::models::{
7 ActivitySubscriptionTargetType, ActivitySubscriptionType, UpdateActivitySubscriptionBody,
8 UpdateActivitySubscriptionResponse,
9};
10use openlark_core::{
11 SDKResult,
12 api::{ApiRequest, ApiResponseTrait, ResponseFormat},
13 config::Config,
14 validate_required,
15};
16use std::sync::Arc;
17
18#[derive(Debug, Clone)]
20pub struct UpdateActivitySubscriptionRequest {
21 config: Arc<Config>,
23 tasklist_guid: String,
25 subscription_guid: String,
27 body: UpdateActivitySubscriptionBody,
29}
30
31impl UpdateActivitySubscriptionRequest {
32 pub fn new(
34 config: Arc<Config>,
35 tasklist_guid: impl Into<String>,
36 subscription_guid: impl Into<String>,
37 ) -> Self {
38 Self {
39 config,
40 tasklist_guid: tasklist_guid.into(),
41 subscription_guid: subscription_guid.into(),
42 body: UpdateActivitySubscriptionBody::default(),
43 }
44 }
45
46 pub fn subscription_type(mut self, subscription_type: ActivitySubscriptionType) -> Self {
48 self.body.subscription_type = Some(subscription_type);
49 self
50 }
51
52 pub fn target_type(mut self, target_type: ActivitySubscriptionTargetType) -> Self {
54 self.body.target_type = Some(target_type);
55 self
56 }
57
58 pub fn target_url(mut self, target_url: impl Into<String>) -> Self {
60 self.body.target_url = Some(target_url.into());
61 self
62 }
63
64 pub fn chat_id(mut self, chat_id: impl Into<String>) -> Self {
66 self.body.chat_id = Some(chat_id.into());
67 self
68 }
69
70 pub async fn execute(self) -> SDKResult<UpdateActivitySubscriptionResponse> {
72 self.execute_with_options(openlark_core::req_option::RequestOption::default())
73 .await
74 }
75
76 pub async fn execute_with_options(
78 self,
79 option: openlark_core::req_option::RequestOption,
80 ) -> SDKResult<UpdateActivitySubscriptionResponse> {
81 validate_required!(self.tasklist_guid.trim(), "任务清单GUID不能为空");
83 validate_required!(self.subscription_guid.trim(), "订阅GUID不能为空");
84
85 let api_endpoint = TaskApiV2::ActivitySubscriptionUpdate(
86 self.tasklist_guid.clone(),
87 self.subscription_guid.clone(),
88 );
89 let mut request =
90 ApiRequest::<UpdateActivitySubscriptionResponse>::patch(api_endpoint.to_url());
91
92 let request_body = &self.body;
93 request = request.body(serialize_params(request_body, "更新动态订阅")?);
94
95 let response =
96 openlark_core::http::Transport::request(request, &self.config, Some(option)).await?;
97 extract_response_data(response, "更新动态订阅")
98 }
99}
100
101impl ApiResponseTrait for UpdateActivitySubscriptionResponse {
102 fn data_format() -> ResponseFormat {
103 ResponseFormat::Data
104 }
105}
106
107#[cfg(test)]
108#[allow(unused_imports)]
109mod tests {
110 use std::sync::Arc;
111
112 use super::*;
113
114 #[test]
115 fn test_update_activity_subscription_builder() {
116 let config = Arc::new(
117 openlark_core::config::Config::builder()
118 .app_id("test")
119 .app_secret("test")
120 .build(),
121 );
122
123 let request =
124 UpdateActivitySubscriptionRequest::new(config, "tasklist_123", "subscription_456")
125 .subscription_type(ActivitySubscriptionType::TaskUpdated)
126 .target_type(ActivitySubscriptionTargetType::Chat)
127 .chat_id("chat_789");
128
129 assert_eq!(request.tasklist_guid, "tasklist_123");
130 assert_eq!(request.subscription_guid, "subscription_456");
131 assert_eq!(
132 request.body.subscription_type,
133 Some(ActivitySubscriptionType::TaskUpdated)
134 );
135 assert_eq!(
136 request.body.target_type,
137 Some(ActivitySubscriptionTargetType::Chat)
138 );
139 assert_eq!(request.body.chat_id, Some("chat_789".to_string()));
140 }
141
142 #[test]
143 fn test_activity_subscription_update_api_v2_url() {
144 let endpoint = TaskApiV2::ActivitySubscriptionUpdate(
145 "tasklist_123".to_string(),
146 "subscription_456".to_string(),
147 );
148 assert_eq!(
149 endpoint.to_url(),
150 "/open-apis/task/v2/tasklists/tasklist_123/activity_subscriptions/subscription_456"
151 );
152 }
153}