dialtone_axum 0.1.0

Dialtone Axum Back-end
Documentation
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, &params.actor_id).await?;
    fetch_actor_system_info(&pool, &params.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())
}