dialtone_axum 0.1.0

Dialtone Axum Back-end
Documentation
use axum::{extract::Extension, response::IntoResponse, Json};
use dialtone_common::rest::{actors::actor_exchanges::PutActorRequest, simple_exchanges::SimpleResponse};
use dialtone_sqlx::control::actor::change_default::change_default_actor;
use sqlx::{Pool, Postgres};

use crate::{
    authz::authz_actor::authz_owner_or_actoradmin_for_actor,
    response::response_error::ResponseError,
    start_server::{Claims, SharedState},
};

pub async fn put_default_actor_handler(
    claims: Claims,
    Json(request): Json<PutActorRequest>,
    Extension(pool): Extension<Pool<Postgres>>,
    Extension(state): Extension<SharedState>,
) -> Result<impl IntoResponse, ResponseError> {
    authz_owner_or_actoradmin_for_actor(&pool, &state, &request.actor_id).await?;
    change_default_actor(&pool, &claims.sub, &request.actor_id)
        .await?
        .map(|_| Json(SimpleResponse::success()))
        .ok_or(ResponseError::not_found())
}