use std::sync::Arc;
use axum::{Extension, Json, extract::State};
use pib_service_api_types::body::{Body, GetBodyListResponseBody};
use crate::{Result, ServiceState, oidc::UserInfo};
pub(crate) mod by_body_id;
pub(crate) async fn get(
State(service_state): State<Arc<ServiceState>>,
Extension(user): Extension<UserInfo>,
) -> Result<Json<GetBodyListResponseBody>> {
let mut inventory = service_state.inventory_provider.get_inventory().await?;
let user = inventory.get_user_by_sub(user.sub.to_string()).await?;
let bodies = inventory.get_bodies_for_user(user.id).await?;
let data = bodies
.into_iter()
.map(
|pib_service_inventory::Body {
id,
created,
modified,
short_name,
name,
website,
license,
license_valid_since,
oparl_since,
ags,
rgs,
contact_email,
contact_name,
classification,
}| Body {
id,
created,
modified,
short_name,
name,
website,
license,
license_valid_since,
oparl_since,
ags,
rgs,
contact_email,
contact_name,
classification,
},
)
.collect();
Ok(Json(GetBodyListResponseBody { data }))
}