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