use std::sync::Arc;
use axum::{Extension, Json, extract::State};
use pib_service_api_types::me::profile::{GetResponseBody, PatchRequestBody};
use pib_service_inventory::{UpdateUser, User};
use crate::{Result, ServiceState, oidc::UserInfo};
pub(crate) async fn get(
State(service_state): State<Arc<ServiceState>>,
Extension(user): Extension<UserInfo>,
) -> Result<Json<GetResponseBody>> {
let mut inventory = service_state.inventory_provider.get_inventory().await?;
let user = inventory.get_user_by_sub(user.sub.to_string()).await?;
Ok(Json(GetResponseBody {
display_name: user.display_name,
}))
}
pub(crate) async fn patch(
State(service_state): State<Arc<ServiceState>>,
Extension(user): Extension<UserInfo>,
Json(PatchRequestBody { display_name }): Json<PatchRequestBody>,
) -> Result<Json<GetResponseBody>> {
let mut inventory = service_state.inventory_provider.get_inventory().await?;
let user = inventory.get_user_by_sub(user.sub.to_string()).await?;
let User {
id: _,
sub: _,
display_name,
} = inventory
.update_user(UpdateUser {
id: user.id,
sub: None,
display_name,
})
.await?;
Ok(Json(GetResponseBody { display_name }))
}