use axum::{
extract::{Extension, Query},
response::IntoResponse,
Json,
};
use dialtone_common::rest::{
actors::{actor_exchanges::GetActorRequest, actor_model::ActorSystemInfo},
simple_exchanges::SimpleResponse,
};
use dialtone_sqlx::db::actor::{
fetch_sysinfo::fetch_actor_system_info, update_sysinfo::update_actor_system_info,
};
use sqlx::{Pool, Postgres};
use crate::{
authz::authz_actor::authz_actoradmin_for_actor,
response::response_error::ResponseError,
start_server::{Claims, SharedState},
};
pub async fn get_actor_sysinfo_handler(
_: Claims,
Query(params): Query<GetActorRequest>,
Extension(pool): Extension<Pool<Postgres>>,
Extension(state): Extension<SharedState>,
) -> Result<impl IntoResponse, ResponseError> {
authz_actoradmin_for_actor(&state, ¶ms.actor_id).await?;
fetch_actor_system_info(&pool, ¶ms.actor_id)
.await?
.map(|v| Json(v))
.ok_or(ResponseError::not_found())
}
pub async fn put_actor_sysinfo_handler(
_: Claims,
Json(request): Json<ActorSystemInfo>,
Extension(pool): Extension<Pool<Postgres>>,
Extension(state): Extension<SharedState>,
) -> Result<impl IntoResponse, ResponseError> {
authz_actoradmin_for_actor(&state, &request.actor_id).await?;
update_actor_system_info(&pool, request)
.await?
.map(|_| Json(SimpleResponse::success()))
.ok_or(ResponseError::not_found())
}