pib-service-inventory 0.13.1

Inventory interface library to be used in pib-service
Documentation
// SPDX-FileCopyrightText: Politik im Blick developers
// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
//
// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2

use std::sync::Arc;

use uuid::Uuid;

use crate::{
    AgendaItem, Body, Inventory, Meeting, Membership, NewBody, NewMeeting, NewUser, Organization,
    Person, Result, System, UpdateUser, User,
};

#[async_trait::async_trait]
impl<I: Inventory + Sync> Inventory for Arc<tokio::sync::RwLock<I>> {
    async fn create_user(&mut self, user: NewUser) -> Result<User> {
        self.write().await.create_user(user).await
    }

    async fn get_user_by_sub(&mut self, sub: String) -> Result<User> {
        self.write().await.get_user_by_sub(sub).await
    }

    async fn update_user(&mut self, update: UpdateUser) -> Result<User> {
        self.write().await.update_user(update).await
    }

    async fn has_user_body_permission(&mut self, user_id: Uuid, body_id: &str) -> Result<bool> {
        println!("mark a 1");
        self.write()
            .await
            .has_user_body_permission(user_id, body_id)
            .await
    }

    async fn get_system(&mut self) -> Result<System> {
        self.write().await.get_system().await
    }

    async fn create_body(&mut self, body: NewBody) -> Result<Body> {
        self.write().await.create_body(body).await
    }

    async fn get_bodies(&mut self) -> Result<Vec<Body>> {
        self.write().await.get_bodies().await
    }

    async fn get_bodies_for_user(&mut self, user_id: Uuid) -> Result<Vec<Body>> {
        self.write().await.get_bodies_for_user(user_id).await
    }

    async fn get_body(&mut self, body_id: &str) -> Result<Body> {
        self.write().await.get_body(body_id).await
    }

    async fn get_persons(&mut self, body_id: &str) -> Result<Vec<Person>> {
        self.write().await.get_persons(body_id).await
    }

    async fn get_person(&mut self, body_id: &str, person_id: &str) -> Result<Person> {
        self.write().await.get_person(body_id, person_id).await
    }

    async fn get_person_memberships(&mut self, person_id: &str) -> Result<Vec<Membership>> {
        self.write().await.get_person_memberships(person_id).await
    }

    async fn get_organizations(&mut self, body_id: &str) -> Result<Vec<Organization>> {
        self.write().await.get_organizations(body_id).await
    }

    async fn get_organization(
        &mut self,
        body_id: &str,
        organization_id: &str,
    ) -> Result<Organization> {
        self.write()
            .await
            .get_organization(body_id, organization_id)
            .await
    }

    async fn get_organization_meetings(
        &mut self,
        body_id: &str,
        organization_id: &str,
    ) -> Result<Vec<Meeting>> {
        self.write()
            .await
            .get_organization_meetings(body_id, organization_id)
            .await
    }

    async fn get_organization_memberships(
        &mut self,
        organization_id: &str,
    ) -> Result<Vec<Membership>> {
        self.write()
            .await
            .get_organization_memberships(organization_id)
            .await
    }

    async fn get_agenda_items(&mut self, body_id: &str) -> Result<Vec<AgendaItem>> {
        self.write().await.get_agenda_items(body_id).await
    }

    async fn get_agenda_item(&mut self, body_id: &str, agenda_item_id: &str) -> Result<AgendaItem> {
        self.write()
            .await
            .get_agenda_item(body_id, agenda_item_id)
            .await
    }

    async fn get_meetings(&mut self, body_id: &str) -> Result<Vec<Meeting>> {
        self.write().await.get_meetings(body_id).await
    }

    async fn get_meeting(&mut self, body_id: &str, meeting_id: &str) -> Result<Meeting> {
        self.write().await.get_meeting(body_id, meeting_id).await
    }

    async fn create_meeting(&mut self, meeting: NewMeeting) -> Result<Meeting> {
        self.write().await.create_meeting(meeting).await
    }

    async fn get_memberships(&mut self, body_id: &str) -> Result<Vec<Membership>> {
        self.write().await.get_memberships(body_id).await
    }

    async fn get_membership(&mut self, body_id: &str, membership_id: &str) -> Result<Membership> {
        self.write()
            .await
            .get_membership(body_id, membership_id)
            .await
    }
}