1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::{manager_api, queue_api, queue_selection_api};
4use crate::gen::manager::models;
5use crate::http::{collect_all, fetch_page, Page};
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9pub struct QueuesResource {
11 pub(crate) cfg: SharedCfg<Configuration>,
12 pub(crate) retry: RetryPolicy,
13 pub selections: QueueSelectionsResource,
15}
16
17impl QueuesResource {
18 pub async fn list_all(&self) -> Result<Vec<models::Queue>, ManagerError> {
20 let cfg = self.cfg.get().await?;
21 let cfg = cfg.as_ref();
22 collect_all(&self.retry, map_manager_err, |page| async move {
23 let r = queue_api::list_queues(cfg, Some(page), None).await?;
24 Ok((r.items, r.pagination.pages, r.pagination.current))
25 })
26 .await
27 }
28
29 pub async fn list_page(
31 &self,
32 page: i32,
33 per_page: Option<i32>,
34 ) -> Result<Page<models::Queue>, ManagerError> {
35 let cfg = self.cfg.get().await?;
36 let cfg = cfg.as_ref();
37 fetch_page(&self.retry, map_manager_err, || async move {
38 let r = queue_api::list_queues(cfg, Some(page), per_page).await?;
39 Ok((
40 r.items,
41 r.pagination.pages,
42 r.pagination.current,
43 Some(r.pagination.total),
44 ))
45 })
46 .await
47 }
48
49 pub async fn create(
51 &self,
52 body: models::RestCreateQueue,
53 ) -> Result<models::QueueItemResponse, ManagerError> {
54 let cfg = self.cfg.get().await?;
55 let cfg = cfg.as_ref();
56 with_retry(&self.retry, false, || {
57 queue_api::create_queue(cfg, body.clone())
58 })
59 .await
60 .map_err(map_manager_err)
61 }
62
63 pub async fn get(&self, id: &str) -> Result<models::QueueItemResponse, ManagerError> {
65 let cfg = self.cfg.get().await?;
66 let cfg = cfg.as_ref();
67 with_retry(&self.retry, true, || queue_api::get_queue(cfg, id))
68 .await
69 .map_err(map_manager_err)
70 }
71
72 pub async fn update(
74 &self,
75 id: &str,
76 body: models::RestUpdateQueue,
77 ) -> Result<models::QueueItemResponse, ManagerError> {
78 let cfg = self.cfg.get().await?;
79 let cfg = cfg.as_ref();
80 with_retry(&self.retry, false, || {
81 queue_api::update_queue(cfg, id, body.clone())
82 })
83 .await
84 .map_err(map_manager_err)
85 }
86
87 pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
89 let cfg = self.cfg.get().await?;
90 let cfg = cfg.as_ref();
91 with_retry(&self.retry, false, || queue_api::delete_queue(cfg, id))
92 .await
93 .map_err(map_manager_err)?;
94 Ok(())
95 }
96
97 pub async fn list_triggers(
99 &self,
100 queue_id: &str,
101 ) -> Result<models::QueueTriggerListResponse, ManagerError> {
102 let cfg = self.cfg.get().await?;
103 let cfg = cfg.as_ref();
104 with_retry(&self.retry, true, || {
105 queue_api::list_queue_triggers(cfg, queue_id)
106 })
107 .await
108 .map_err(map_manager_err)
109 }
110
111 pub async fn bulk_update(
113 &self,
114 body: models::QueueBulkUpdateRequest,
115 ) -> Result<models::QueueListResponse, ManagerError> {
116 let cfg = self.cfg.get().await?;
117 let cfg = cfg.as_ref();
118 with_retry(&self.retry, false, || {
119 queue_api::bulk_update_queues(cfg, body.clone())
120 })
121 .await
122 .map_err(map_manager_err)
123 }
124
125 pub async fn global_selections(
127 &self,
128 ) -> Result<models::GlobalQueueSelectionListResponse, ManagerError> {
129 let cfg = self.cfg.get().await?;
130 let cfg = cfg.as_ref();
131 with_retry(&self.retry, true, || {
132 queue_api::list_global_queue_selections(cfg, None, None, None, None, None)
133 })
134 .await
135 .map_err(map_manager_err)
136 }
137}
138
139pub struct QueueSelectionsResource {
141 pub(crate) cfg: SharedCfg<Configuration>,
142 pub(crate) retry: RetryPolicy,
143}
144
145impl QueueSelectionsResource {
146 pub async fn list_all(
148 &self,
149 queue_id: &str,
150 ) -> Result<Vec<models::QueueSelection>, ManagerError> {
151 let cfg = self.cfg.get().await?;
152 let cfg = cfg.as_ref();
153 collect_all(&self.retry, map_manager_err, |page| async move {
154 let r =
155 queue_selection_api::list_queue_selections(cfg, queue_id, Some(page), None).await?;
156 Ok((r.items, r.pagination.pages, r.pagination.current))
157 })
158 .await
159 }
160
161 pub async fn create(
163 &self,
164 queue_id: &str,
165 body: models::RestCreateQueueSelection,
166 ) -> Result<models::QueueSelectionItemResponse, ManagerError> {
167 let cfg = self.cfg.get().await?;
168 let cfg = cfg.as_ref();
169 with_retry(&self.retry, false, || {
170 queue_selection_api::create_queue_selection(cfg, queue_id, body.clone())
171 })
172 .await
173 .map_err(map_manager_err)
174 }
175
176 pub async fn get(
178 &self,
179 queue_id: &str,
180 id: &str,
181 ) -> Result<models::QueueSelectionItemResponse, ManagerError> {
182 let cfg = self.cfg.get().await?;
183 let cfg = cfg.as_ref();
184 with_retry(&self.retry, true, || {
185 queue_selection_api::get_queue_selection(cfg, queue_id, id)
186 })
187 .await
188 .map_err(map_manager_err)
189 }
190
191 pub async fn update(
193 &self,
194 queue_id: &str,
195 id: &str,
196 body: models::RestUpdateQueueSelection,
197 ) -> Result<models::QueueSelectionItemResponse, ManagerError> {
198 let cfg = self.cfg.get().await?;
199 let cfg = cfg.as_ref();
200 with_retry(&self.retry, false, || {
201 queue_selection_api::update_queue_selection(cfg, queue_id, id, body.clone())
202 })
203 .await
204 .map_err(map_manager_err)
205 }
206
207 pub async fn delete(&self, queue_id: &str, id: &str) -> Result<(), ManagerError> {
209 let cfg = self.cfg.get().await?;
210 let cfg = cfg.as_ref();
211 with_retry(&self.retry, false, || {
212 queue_selection_api::delete_queue_selection(cfg, queue_id, id)
213 })
214 .await
215 .map_err(map_manager_err)?;
216 Ok(())
217 }
218
219 pub async fn select_agents(
221 &self,
222 queue_id: &str,
223 ) -> Result<models::QueueSelectionResponse, ManagerError> {
224 let cfg = self.cfg.get().await?;
225 let cfg = cfg.as_ref();
226 with_retry(&self.retry, true, || {
227 manager_api::get_agents_for_queue_selection(cfg, queue_id, None)
228 })
229 .await
230 .map_err(map_manager_err)
231 }
232
233 pub async fn add_agent(
235 &self,
236 queue_id: &str,
237 selection_id: &str,
238 agent_id: &str,
239 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
240 let cfg = self.cfg.get().await?;
241 let cfg = cfg.as_ref();
242 with_retry(&self.retry, false, || {
243 manager_api::add_agent_to_queue_selection(
244 cfg,
245 queue_id,
246 selection_id,
247 Some(addition(agent_id)),
248 )
249 })
250 .await
251 .map_err(map_manager_err)
252 }
253
254 pub async fn remove_agent(
256 &self,
257 queue_id: &str,
258 selection_id: &str,
259 id: &str,
260 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
261 let cfg = self.cfg.get().await?;
262 let cfg = cfg.as_ref();
263 with_retry(&self.retry, false, || {
264 manager_api::remove_agent_from_queue_selection(cfg, queue_id, selection_id, id)
265 })
266 .await
267 .map_err(map_manager_err)
268 }
269
270 pub async fn add_group(
272 &self,
273 queue_id: &str,
274 selection_id: &str,
275 group_id: &str,
276 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
277 let cfg = self.cfg.get().await?;
278 let cfg = cfg.as_ref();
279 with_retry(&self.retry, false, || {
280 manager_api::add_group_to_queue_selection(
281 cfg,
282 queue_id,
283 selection_id,
284 Some(addition(group_id)),
285 )
286 })
287 .await
288 .map_err(map_manager_err)
289 }
290
291 pub async fn remove_group(
293 &self,
294 queue_id: &str,
295 selection_id: &str,
296 id: &str,
297 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
298 let cfg = self.cfg.get().await?;
299 let cfg = cfg.as_ref();
300 with_retry(&self.retry, false, || {
301 manager_api::remove_group_from_queue_selection(cfg, queue_id, selection_id, id)
302 })
303 .await
304 .map_err(map_manager_err)
305 }
306
307 pub async fn add_tag(
309 &self,
310 queue_id: &str,
311 selection_id: &str,
312 tag_id: &str,
313 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
314 let cfg = self.cfg.get().await?;
315 let cfg = cfg.as_ref();
316 with_retry(&self.retry, false, || {
317 manager_api::add_tag_to_queue_selection(
318 cfg,
319 queue_id,
320 selection_id,
321 Some(addition(tag_id)),
322 )
323 })
324 .await
325 .map_err(map_manager_err)
326 }
327
328 pub async fn remove_tag(
330 &self,
331 queue_id: &str,
332 selection_id: &str,
333 id: &str,
334 ) -> Result<models::QueueSelectionModificationResponse, ManagerError> {
335 let cfg = self.cfg.get().await?;
336 let cfg = cfg.as_ref();
337 with_retry(&self.retry, false, || {
338 manager_api::remove_tag_from_queue_selection(cfg, queue_id, selection_id, id)
339 })
340 .await
341 .map_err(map_manager_err)
342 }
343
344 pub async fn set_priority(
346 &self,
347 queue_id: &str,
348 items: Vec<models::QueueSelectionPriorityItem>,
349 ) -> Result<models::QueueSelectionListResponse, ManagerError> {
350 let cfg = self.cfg.get().await?;
351 let cfg = cfg.as_ref();
352 with_retry(&self.retry, false, || {
353 queue_api::set_queue_selections_priority(cfg, queue_id, items.clone())
354 })
355 .await
356 .map_err(map_manager_err)
357 }
358}
359
360fn addition(id: &str) -> models::QueueSelectionAddition {
361 models::QueueSelectionAddition {
362 id: Some(id.to_string()),
363 }
364}