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