use axum::{extract::Query, response::IntoResponse, Extension, Json};
use dialtone_common::rest::ap_objects::ap_object_exchanges::GetApObject;
use dialtone_sqlx::db::ap_object::fetch::fetch_ap_object;
use sqlx::{Pool, Postgres};
use crate::{
authz::authz_ap_object::authz_owner_or_contentadmin_for_ap_object,
err_not_found,
response::response_error::ResponseError,
start_server::{Claims, SharedState},
};
pub async fn get_ap_object_handler(
Query(params): Query<GetApObject>,
_claims: Claims,
Extension(state): Extension<SharedState>,
Extension(pool): Extension<Pool<Postgres>>,
) -> Result<impl IntoResponse, ResponseError> {
authz_owner_or_contentadmin_for_ap_object(&pool, &state, ¶ms.ap_object_id).await?;
fetch_ap_object(&pool, ¶ms.ap_object_id)
.await?
.map_or_else(|| err_not_found!(), |v| Ok(Json(v)))
}