use axum::extract::{Extension, Query};
use axum::response::IntoResponse;
use axum::Json;
use dialtone_common::rest::users::user_exchanges::GetUser;
use dialtone_common::utils::parse_acct::parse_user_acct;
use sqlx::{Pool, Postgres};
use crate::authz::authz_sysrole::authz_useradmin;
use crate::err_not_found;
use dialtone_sqlx::db::user_principal::fetch_sysinfo::fetch_user_system_info;
use crate::response::response_error::ResponseError;
use crate::start_server::{Claims, SharedState};
pub async fn get_user_sysinfo_handler(
_: Claims,
Query(params): Query<GetUser>,
Extension(pool): Extension<Pool<Postgres>>,
Extension(state): Extension<SharedState>,
) -> Result<impl IntoResponse, ResponseError> {
let user_host = parse_user_acct(¶ms.acct)?;
authz_useradmin(&state, &user_host.host_name).await?;
let sysinfo = fetch_user_system_info(&pool, ¶ms.acct).await?;
match sysinfo {
None => err_not_found!(),
Some(v) => Ok(Json(v)),
}
}