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 uuid::Uuid;

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

mod stock_impls;

#[cfg_attr(feature = "mockall", mockall::automock)]
#[async_trait::async_trait]
pub trait Inventory: Send {
    async fn create_user(&mut self, user: NewUser) -> Result<User>;
    async fn get_user_by_sub(&mut self, sub: String) -> Result<User>;
    async fn update_user(&mut self, update: UpdateUser) -> Result<User>;
    async fn has_user_body_permission(&mut self, user_id: Uuid, body_id: &str) -> Result<bool>;

    async fn get_system(&mut self) -> Result<System>;
    async fn create_body(&mut self, body: NewBody) -> Result<Body>;
    async fn get_bodies(&mut self) -> Result<Vec<Body>>;
    async fn get_bodies_for_user(&mut self, user_id: Uuid) -> Result<Vec<Body>>;
    async fn get_body(&mut self, body_id: &str) -> Result<Body>;
    async fn get_persons(&mut self, body_id: &str) -> Result<Vec<Person>>;
    async fn get_person(&mut self, body_id: &str, person_id: &str) -> Result<Person>;
    async fn get_person_memberships(&mut self, person_id: &str) -> Result<Vec<Membership>>;
    async fn get_organizations(&mut self, body_id: &str) -> Result<Vec<Organization>>;
    async fn get_organization(
        &mut self,
        body_id: &str,
        organization_id: &str,
    ) -> Result<Organization>;
    async fn get_organization_meetings(
        &mut self,
        body_id: &str,
        organization_id: &str,
    ) -> Result<Vec<Meeting>>;
    async fn get_organization_memberships(
        &mut self,
        organization_id: &str,
    ) -> Result<Vec<Membership>>;
    async fn get_agenda_items(&mut self, body_id: &str) -> Result<Vec<AgendaItem>>;
    async fn get_agenda_item(&mut self, body_id: &str, agenda_item_id: &str) -> Result<AgendaItem>;
    async fn get_meetings(&mut self, body_id: &str) -> Result<Vec<Meeting>>;
    async fn get_meeting(&mut self, body_id: &str, meeting_id: &str) -> Result<Meeting>;
    async fn create_meeting(&mut self, meeting: NewMeeting) -> Result<Meeting>;
    async fn get_memberships(&mut self, body_id: &str) -> Result<Vec<Membership>>;
    async fn get_membership(&mut self, body_id: &str, membership_id: &str) -> Result<Membership>;
}