babelforce_manager_sdk/resources/
calendars.rs1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::{calendar_api as api, manager_api};
4use crate::gen::manager::models;
5use crate::http::collect_all;
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9pub struct CalendarsResource {
11 pub(crate) cfg: SharedCfg<Configuration>,
12 pub(crate) retry: RetryPolicy,
13}
14
15impl CalendarsResource {
16 pub async fn list_all(&self) -> Result<Vec<models::Calendar>, ManagerError> {
18 let cfg = self.cfg.get().await?;
19 let cfg = cfg.as_ref();
20 collect_all(&self.retry, map_manager_err, |page| async move {
21 let r = api::list_calendars(cfg, Some(page), None).await?;
22 Ok((
23 r.items,
24 r.pagination.pages.unwrap_or(1),
25 r.pagination.current.unwrap_or(1),
26 ))
27 })
28 .await
29 }
30
31 pub async fn create(
33 &self,
34 body: models::RestCreateCalendar,
35 ) -> Result<models::CalendarItemResponse, ManagerError> {
36 let cfg = self.cfg.get().await?;
37 let cfg = cfg.as_ref();
38 with_retry(&self.retry, false, || {
39 api::create_calendar(cfg, body.clone())
40 })
41 .await
42 .map_err(map_manager_err)
43 }
44
45 pub async fn get(&self, id: &str) -> Result<models::CalendarItemResponse, ManagerError> {
47 let cfg = self.cfg.get().await?;
48 let cfg = cfg.as_ref();
49 with_retry(&self.retry, true, || api::get_calendar(cfg, id))
50 .await
51 .map_err(map_manager_err)
52 }
53
54 pub async fn update(
56 &self,
57 id: &str,
58 body: models::RestUpdateCalendar,
59 ) -> Result<models::CalendarItemResponse, ManagerError> {
60 let cfg = self.cfg.get().await?;
61 let cfg = cfg.as_ref();
62 with_retry(&self.retry, false, || {
63 api::update_calendar(cfg, id, body.clone())
64 })
65 .await
66 .map_err(map_manager_err)
67 }
68
69 pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
71 let cfg = self.cfg.get().await?;
72 let cfg = cfg.as_ref();
73 with_retry(&self.retry, false, || api::delete_calendar(cfg, id))
74 .await
75 .map_err(map_manager_err)?;
76 Ok(())
77 }
78
79 pub async fn get_dates(
81 &self,
82 id: &str,
83 ) -> Result<models::CalendarDateListResponse, ManagerError> {
84 let cfg = self.cfg.get().await?;
85 let cfg = cfg.as_ref();
86 with_retry(&self.retry, true, || {
87 manager_api::get_calender_dates(cfg, id)
88 })
89 .await
90 .map_err(map_manager_err)
91 }
92
93 pub async fn add_date(
95 &self,
96 id: &str,
97 body: models::CalendarDateBody,
98 ) -> Result<models::CalendarDateItemResponse, ManagerError> {
99 let cfg = self.cfg.get().await?;
100 let cfg = cfg.as_ref();
101 with_retry(&self.retry, false, || {
102 manager_api::add_calendar_date(cfg, id, body.clone())
103 })
104 .await
105 .map_err(map_manager_err)
106 }
107
108 pub async fn get_date(
110 &self,
111 id: &str,
112 date_id: &str,
113 ) -> Result<models::CalendarDateItemResponse, ManagerError> {
114 let cfg = self.cfg.get().await?;
115 let cfg = cfg.as_ref();
116 with_retry(&self.retry, true, || {
117 api::get_calendar_date(cfg, id, date_id)
118 })
119 .await
120 .map_err(map_manager_err)
121 }
122
123 pub async fn update_date(
125 &self,
126 id: &str,
127 date_id: &str,
128 body: models::CalendarDateBody,
129 ) -> Result<models::CalendarDateItemResponse, ManagerError> {
130 let cfg = self.cfg.get().await?;
131 let cfg = cfg.as_ref();
132 with_retry(&self.retry, false, || {
133 api::update_calendar_date(cfg, id, date_id, body.clone())
134 })
135 .await
136 .map_err(map_manager_err)
137 }
138
139 pub async fn remove_date(
141 &self,
142 id: &str,
143 date_id: &str,
144 ) -> Result<models::DefaultV2MessageResponse, ManagerError> {
145 let cfg = self.cfg.get().await?;
146 let cfg = cfg.as_ref();
147 with_retry(&self.retry, false, || {
148 api::remove_calendar_date(cfg, id, date_id)
149 })
150 .await
151 .map_err(map_manager_err)
152 }
153
154 pub async fn test_date(
156 &self,
157 date: Option<&str>,
158 ) -> Result<models::GenericItemResponse, ManagerError> {
159 let cfg = self.cfg.get().await?;
160 let cfg = cfg.as_ref();
161 with_retry(&self.retry, true, || api::test_calendar_date(cfg, date))
162 .await
163 .map_err(map_manager_err)
164 }
165
166 pub async fn bulk_delete(
168 &self,
169 ids: Vec<String>,
170 ) -> Result<models::DefaultV2MessageResponse, ManagerError> {
171 let cfg = self.cfg.get().await?;
172 let cfg = cfg.as_ref();
173 let ids = ids
174 .iter()
175 .map(|id| {
176 uuid::Uuid::parse_str(id)
177 .map_err(|e| ManagerError::InvalidArgument(format!("ids: {e}")))
178 })
179 .collect::<Result<Vec<_>, _>>()?;
180 let body = models::BulkIdsRequest { ids };
181 with_retry(&self.retry, false, || {
182 api::bulk_delete_calendars(cfg, body.clone())
183 })
184 .await
185 .map_err(map_manager_err)
186 }
187
188 pub async fn bulk_update(
190 &self,
191 body: models::CalendarBulkUpdateRequest,
192 ) -> Result<models::CalendarListResponse, ManagerError> {
193 let cfg = self.cfg.get().await?;
194 let cfg = cfg.as_ref();
195 with_retry(&self.retry, false, || {
196 api::bulk_update_calendars(cfg, body.clone())
197 })
198 .await
199 .map_err(map_manager_err)
200 }
201}