use axum::{
Json,
response::{Html, IntoResponse, Response},
};
use utoipa::OpenApi;
use utoipa_scalar::{Scalar, Servable};
use crate::{
api::models::users::CurrentUser,
auth::permissions::{RequiresPermission, operation, resource},
openapi::{AdminApiDoc, AiApiDoc},
};
#[tracing::instrument(skip_all)]
pub async fn admin_openapi_json(_: RequiresPermission<resource::System, operation::ReadAll>) -> Json<utoipa::openapi::OpenApi> {
Json(AdminApiDoc::openapi())
}
#[tracing::instrument(skip_all)]
pub async fn admin_openapi_docs(_: RequiresPermission<resource::System, operation::ReadAll>) -> Response {
let scalar = Scalar::with_url("/admin/openapi.json", AdminApiDoc::openapi());
Html(scalar.to_html()).into_response()
}
#[tracing::instrument(skip_all)]
pub async fn ai_openapi_json(_: CurrentUser) -> Json<utoipa::openapi::OpenApi> {
Json(AiApiDoc::openapi())
}
#[tracing::instrument(skip_all)]
pub async fn ai_openapi_docs(_: CurrentUser) -> Response {
let scalar = Scalar::with_url("/ai/openapi.json", AiApiDoc::openapi());
Html(scalar.to_html()).into_response()
}