babelforce_manager_sdk/resources/
businesshours.rs1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::business_hour_api as api;
3use crate::gen::manager::apis::configuration::Configuration;
4use crate::gen::manager::models;
5use crate::http::collect_all;
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9pub struct BusinessHoursResource {
11 pub(crate) cfg: SharedCfg<Configuration>,
12 pub(crate) retry: RetryPolicy,
13}
14
15impl BusinessHoursResource {
16 pub async fn list_all(&self) -> Result<Vec<models::BusinessHour>, 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_business_hours(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::RestCreateBusinessHour,
35 ) -> Result<models::BusinessHourItemResponse, ManagerError> {
36 let cfg = self.cfg.get().await?;
37 let cfg = cfg.as_ref();
38 with_retry(&self.retry, false, || {
39 api::create_business_hour(cfg, body.clone())
40 })
41 .await
42 .map_err(map_manager_err)
43 }
44
45 pub async fn get(&self, id: &str) -> Result<models::BusinessHourItemResponse, ManagerError> {
47 let cfg = self.cfg.get().await?;
48 let cfg = cfg.as_ref();
49 with_retry(&self.retry, true, || api::get_business_hour(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::RestUpdateBusinessHour,
59 ) -> Result<models::BusinessHourItemResponse, ManagerError> {
60 let cfg = self.cfg.get().await?;
61 let cfg = cfg.as_ref();
62 with_retry(&self.retry, false, || {
63 api::update_business_hour(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_business_hour(cfg, id))
74 .await
75 .map_err(map_manager_err)?;
76 Ok(())
77 }
78
79 pub async fn add_ranges(
81 &self,
82 id: &str,
83 body: models::BusinessHourRangesBody,
84 ) -> Result<models::BusinessHourItemResponse, ManagerError> {
85 let cfg = self.cfg.get().await?;
86 let cfg = cfg.as_ref();
87 with_retry(&self.retry, false, || {
88 api::add_business_hour_ranges(cfg, id, body.clone())
89 })
90 .await
91 .map_err(map_manager_err)
92 }
93
94 pub async fn list_ranges(
96 &self,
97 id: &str,
98 ) -> Result<models::BusinessHourRangeListResponse, ManagerError> {
99 let cfg = self.cfg.get().await?;
100 let cfg = cfg.as_ref();
101 with_retry(&self.retry, true, || {
102 api::list_business_hour_ranges(cfg, id)
103 })
104 .await
105 .map_err(map_manager_err)
106 }
107
108 pub async fn get_range(
110 &self,
111 id: &str,
112 range_id: &str,
113 ) -> Result<models::BusinessHourRangeItemResponse, ManagerError> {
114 let cfg = self.cfg.get().await?;
115 let cfg = cfg.as_ref();
116 with_retry(&self.retry, true, || {
117 api::get_business_hour_range(cfg, id, range_id)
118 })
119 .await
120 .map_err(map_manager_err)
121 }
122
123 pub async fn remove_range(
125 &self,
126 id: &str,
127 range_id: &str,
128 ) -> Result<models::DefaultV2MessageResponse, ManagerError> {
129 let cfg = self.cfg.get().await?;
130 let cfg = cfg.as_ref();
131 with_retry(&self.retry, false, || {
132 api::remove_business_hour_range(cfg, id, range_id)
133 })
134 .await
135 .map_err(map_manager_err)
136 }
137
138 pub async fn bulk_delete(
140 &self,
141 ids: Vec<String>,
142 ) -> Result<models::DefaultV2MessageResponse, ManagerError> {
143 let cfg = self.cfg.get().await?;
144 let cfg = cfg.as_ref();
145 let ids = ids
146 .iter()
147 .map(|id| {
148 uuid::Uuid::parse_str(id)
149 .map_err(|e| ManagerError::InvalidArgument(format!("ids: {e}")))
150 })
151 .collect::<Result<Vec<_>, _>>()?;
152 let body = models::BulkIdsRequest { ids };
153 with_retry(&self.retry, false, || {
154 api::bulk_delete_business_hours(cfg, body.clone())
155 })
156 .await
157 .map_err(map_manager_err)
158 }
159
160 pub async fn bulk_update(
162 &self,
163 body: models::BusinessHourBulkUpdateRequest,
164 ) -> Result<models::BusinessHourListResponse, ManagerError> {
165 let cfg = self.cfg.get().await?;
166 let cfg = cfg.as_ref();
167 with_retry(&self.retry, false, || {
168 api::bulk_update_business_hours(cfg, body.clone())
169 })
170 .await
171 .map_err(map_manager_err)
172 }
173}