Skip to main content

pib_client/
pib_client.rs

1// SPDX-FileCopyrightText: Politik im Blick developers
2// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
3//
4// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2
5
6use pib_service_api_types::Pagination;
7use pib_service_core_types::{
8    AgendaItemId, BodyId, BodyPermissionId, MeetingId, OrganizationId, PersonId, UserId,
9};
10
11mod requests {
12    pub(super) use pib_client_requests::{
13        body::{
14            self,
15            by_id::{
16                meeting::{self, by_id::agenda_item},
17                organization, permission, person,
18            },
19        },
20        config, get, me, user,
21    };
22}
23mod types {
24    pub(super) use pib_service_api_types::{
25        body::{
26            self,
27            by_id::{
28                meeting::{self, by_id::agenda_item},
29                organization, permission, person,
30            },
31        },
32        config, get, me, user,
33    };
34}
35
36#[async_trait::async_trait(?Send)]
37pub trait PibClient: Clone {
38    type ClientError: std::error::Error;
39
40    async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError>;
41
42    async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError>;
43
44    async fn user_get(
45        &self,
46        pagination: Pagination,
47    ) -> Result<types::user::get::ResponseBody, Self::ClientError>;
48
49    async fn user_by_id_get(
50        &self,
51        user_id: UserId,
52    ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError>;
53
54    async fn body_get(
55        &self,
56        pagination: Pagination,
57    ) -> Result<types::body::get::ResponseBody, Self::ClientError>;
58
59    async fn body_post(
60        &self,
61        payload: types::body::post::RequestBody,
62    ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
63
64    async fn body_by_id_get(
65        &self,
66        body_id: BodyId,
67    ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
68
69    async fn body_by_id_permission_get(
70        &self,
71        body_id: BodyId,
72        pagination: Pagination,
73    ) -> Result<types::permission::get::ResponseBody, Self::ClientError>;
74
75    async fn body_by_id_permission_post(
76        &self,
77        body_id: BodyId,
78        payload: types::permission::post::RequestBody,
79    ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError>;
80
81    async fn body_by_id_permission_by_id_get(
82        &self,
83        body_id: BodyId,
84        permission_id: BodyPermissionId,
85    ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError>;
86
87    async fn body_by_id_meeting_get(
88        &self,
89        body_id: BodyId,
90        pagination: Pagination,
91    ) -> Result<types::meeting::get::ResponseBody, Self::ClientError>;
92
93    async fn body_by_id_meeting_post(
94        &self,
95        body_id: BodyId,
96        payload: types::meeting::post::RequestBody,
97    ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
98
99    async fn body_by_id_meeting_by_id_get(
100        &self,
101        body_id: BodyId,
102        meeting_id: MeetingId,
103    ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
104
105    async fn body_by_id_meeting_by_id_agenda_item_get(
106        &self,
107        body_id: BodyId,
108        meeting_id: MeetingId,
109        pagination: Pagination,
110    ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError>;
111
112    async fn body_by_id_meeting_by_id_agenda_item_post(
113        &self,
114        body_id: BodyId,
115        meeting_id: MeetingId,
116        payload: types::meeting::by_id::agenda_item::post::RequestBody,
117    ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
118
119    async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
120        &self,
121        body_id: BodyId,
122        meeting_id: MeetingId,
123        agenda_item_id: AgendaItemId,
124    ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
125
126    async fn body_by_id_organization_get(
127        &self,
128        body_id: BodyId,
129        pagination: Pagination,
130    ) -> Result<types::organization::get::ResponseBody, Self::ClientError>;
131
132    async fn body_by_id_organization_post(
133        &self,
134        body_id: BodyId,
135        payload: types::organization::post::RequestBody,
136    ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
137
138    async fn body_by_id_organization_by_id_get(
139        &self,
140        body_id: BodyId,
141        organization_id: OrganizationId,
142    ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
143
144    async fn body_by_id_person_get(
145        &self,
146        body_id: BodyId,
147        pagination: Pagination,
148    ) -> Result<types::person::get::ResponseBody, Self::ClientError>;
149
150    async fn body_by_id_person_post(
151        &self,
152        body_id: BodyId,
153        payload: types::person::post::RequestBody,
154    ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
155
156    async fn body_by_id_person_by_id_get(
157        &self,
158        body_id: BodyId,
159        person_id: PersonId,
160    ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
161
162    async fn me_profile_get(
163        &self,
164    ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
165
166    async fn me_profile_patch(
167        &self,
168        payload: types::me::profile::patch::RequestBody,
169    ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
170}
171
172#[async_trait::async_trait(?Send)]
173impl<C: http_request_derive_client::Client + Clone> PibClient for C {
174    type ClientError = C::ClientError;
175
176    async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError> {
177        let response = self.execute(requests::get::Request).await?;
178        Ok(response.0)
179    }
180
181    async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError> {
182        let response = self.execute(requests::config::get::Request).await?;
183        Ok(response.0)
184    }
185
186    async fn user_get(
187        &self,
188        pagination: Pagination,
189    ) -> Result<types::user::get::ResponseBody, Self::ClientError> {
190        let response = self
191            .execute(requests::user::get::Request { pagination })
192            .await?;
193        Ok(response.0)
194    }
195
196    async fn user_by_id_get(
197        &self,
198        user_id: UserId,
199    ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError> {
200        let response = self
201            .execute(requests::user::by_id::get::Request { user_id })
202            .await?;
203        Ok(response.0)
204    }
205
206    async fn body_get(
207        &self,
208        pagination: Pagination,
209    ) -> Result<types::body::get::ResponseBody, Self::ClientError> {
210        let response = self
211            .execute(requests::body::get::Request { pagination })
212            .await?;
213        Ok(response.0)
214    }
215
216    async fn body_post(
217        &self,
218        payload: types::body::post::RequestBody,
219    ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
220        Ok(self
221            .execute(requests::body::post::Request { payload })
222            .await?
223            .0)
224    }
225
226    async fn body_by_id_get(
227        &self,
228        body_id: BodyId,
229    ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
230        let response = self
231            .execute(requests::body::by_id::get::Request { body_id })
232            .await?;
233        Ok(response.0)
234    }
235
236    async fn body_by_id_permission_get(
237        &self,
238        body_id: BodyId,
239        pagination: Pagination,
240    ) -> Result<types::permission::get::ResponseBody, Self::ClientError> {
241        Ok(self
242            .execute(requests::permission::get::Request {
243                body_id,
244                pagination,
245            })
246            .await?
247            .0)
248    }
249
250    async fn body_by_id_permission_post(
251        &self,
252        body_id: BodyId,
253        payload: types::permission::post::RequestBody,
254    ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError> {
255        Ok(self
256            .execute(requests::permission::post::Request { body_id, payload })
257            .await?
258            .0)
259    }
260
261    async fn body_by_id_permission_by_id_get(
262        &self,
263        body_id: BodyId,
264        permission_id: BodyPermissionId,
265    ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError> {
266        let response = self
267            .execute(requests::permission::by_id::get::Request {
268                body_id,
269                permission_id,
270            })
271            .await?;
272        Ok(response.0)
273    }
274
275    async fn body_by_id_meeting_get(
276        &self,
277        body_id: BodyId,
278        pagination: Pagination,
279    ) -> Result<types::meeting::get::ResponseBody, Self::ClientError> {
280        Ok(self
281            .execute(requests::meeting::get::Request {
282                body_id,
283                pagination,
284            })
285            .await?
286            .0)
287    }
288
289    async fn body_by_id_meeting_post(
290        &self,
291        body_id: BodyId,
292        payload: types::meeting::post::RequestBody,
293    ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
294        Ok(self
295            .execute(requests::meeting::post::Request { body_id, payload })
296            .await?
297            .0)
298    }
299
300    async fn body_by_id_meeting_by_id_get(
301        &self,
302        body_id: BodyId,
303        meeting_id: MeetingId,
304    ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
305        let response = self
306            .execute(requests::meeting::by_id::get::Request {
307                body_id,
308                meeting_id,
309            })
310            .await?;
311        Ok(response.0)
312    }
313
314    async fn body_by_id_meeting_by_id_agenda_item_get(
315        &self,
316        body_id: BodyId,
317        meeting_id: MeetingId,
318        pagination: Pagination,
319    ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError> {
320        let response = self
321            .execute(requests::agenda_item::get::Request {
322                body_id,
323                meeting_id,
324                pagination,
325            })
326            .await?;
327        Ok(response.0)
328    }
329
330    async fn body_by_id_meeting_by_id_agenda_item_post(
331        &self,
332        body_id: BodyId,
333        meeting_id: MeetingId,
334        payload: types::agenda_item::post::RequestBody,
335    ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
336        Ok(self
337            .execute(requests::agenda_item::post::Request {
338                body_id,
339                meeting_id,
340                payload,
341            })
342            .await?
343            .0)
344    }
345
346    async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
347        &self,
348        body_id: BodyId,
349        meeting_id: MeetingId,
350        agenda_item_id: AgendaItemId,
351    ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
352        let response = self
353            .execute(requests::agenda_item::by_id::get::Request {
354                body_id,
355                meeting_id,
356                agenda_item_id,
357            })
358            .await?;
359        Ok(response.0)
360    }
361
362    async fn body_by_id_organization_get(
363        &self,
364        body_id: BodyId,
365        pagination: Pagination,
366    ) -> Result<types::organization::get::ResponseBody, Self::ClientError> {
367        Ok(self
368            .execute(requests::organization::get::Request {
369                body_id,
370                pagination,
371            })
372            .await?
373            .0)
374    }
375
376    async fn body_by_id_organization_post(
377        &self,
378        body_id: BodyId,
379        payload: types::organization::post::RequestBody,
380    ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
381        Ok(self
382            .execute(requests::organization::post::Request { body_id, payload })
383            .await?
384            .0)
385    }
386
387    async fn body_by_id_organization_by_id_get(
388        &self,
389        body_id: BodyId,
390        organization_id: OrganizationId,
391    ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
392        let response = self
393            .execute(requests::organization::by_id::get::Request {
394                body_id,
395                organization_id,
396            })
397            .await?;
398        Ok(response.0)
399    }
400
401    async fn body_by_id_person_get(
402        &self,
403        body_id: BodyId,
404        pagination: Pagination,
405    ) -> Result<types::person::get::ResponseBody, Self::ClientError> {
406        Ok(self
407            .execute(requests::person::get::Request {
408                body_id,
409                pagination,
410            })
411            .await?
412            .0)
413    }
414
415    async fn body_by_id_person_post(
416        &self,
417        body_id: BodyId,
418        payload: types::person::post::RequestBody,
419    ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
420        Ok(self
421            .execute(requests::person::post::Request { body_id, payload })
422            .await?
423            .0)
424    }
425
426    async fn body_by_id_person_by_id_get(
427        &self,
428        body_id: BodyId,
429        person_id: PersonId,
430    ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
431        let response = self
432            .execute(requests::person::by_id::get::Request { body_id, person_id })
433            .await?;
434        Ok(response.0)
435    }
436
437    async fn me_profile_get(
438        &self,
439    ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
440        Ok(self.execute(requests::me::profile::get::Request).await?.0)
441    }
442
443    async fn me_profile_patch(
444        &self,
445        payload: types::me::profile::patch::RequestBody,
446    ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
447        Ok(self
448            .execute(requests::me::profile::patch::Request { payload })
449            .await?
450            .0)
451    }
452}