Files
biggus-dickus/crates/api/src/openapi.rs
T
2026-06-02 22:33:44 +02:00

74 lines
2.3 KiB
Rust

use axum::{Json, Router, extract::State, routing::get};
use utoipa::OpenApi;
use crate::{AppState, admin, admin_authorities, admin_objects, admin_vocab, health, public};
#[derive(OpenApi)]
#[openapi(
paths(
health::live,
health::ready,
public::list_objects,
public::get_object,
admin::login,
admin::logout,
admin::me,
admin::list_users,
admin::set_visibility,
admin_objects::list_objects,
admin_objects::get_object,
admin_objects::create_object,
admin_objects::update_object,
admin_objects::delete_object,
admin_objects::list_field_definitions,
admin_objects::set_fields,
admin_vocab::list_vocabularies,
admin_vocab::create_vocabulary,
admin_vocab::list_terms,
admin_vocab::add_term,
admin_authorities::list_authorities,
admin_authorities::create_authority
),
components(schemas(
health::Live,
health::Ready,
public::PublicView,
public::PublicObjectPage,
admin::LoginRequest,
admin::UserView,
admin::VisibilityRequest,
admin_objects::AdminObjectView,
admin_objects::AdminObjectPage,
admin_objects::LabelView,
admin_objects::ObjectCreateRequest,
admin_objects::ObjectUpdateRequest,
admin_objects::CreatedObject,
admin_objects::FieldDefinitionView,
admin_vocab::VocabularyView,
admin_vocab::NewVocabularyRequest,
admin_vocab::NewTermRequest,
admin_vocab::LabelInput,
admin_vocab::TermView,
admin_vocab::CreatedId,
admin_authorities::AuthorityView,
admin_authorities::NewAuthorityRequest
)),
info(title = "Collection Management System", version = "0.0.0")
)]
struct ApiDoc;
/// Serve the OpenAPI document, overriding the title from runtime config so the
/// product name is never hardcoded.
async fn openapi_json(State(state): State<AppState>) -> Json<utoipa::openapi::OpenApi> {
let mut doc = ApiDoc::openapi();
doc.info.title = state.app_name.clone();
Json(doc)
}
/// OpenAPI routes, parameterized over [`AppState`].
pub(crate) fn routes() -> Router<AppState> {
Router::new().route("/api-docs/openapi.json", get(openapi_json))
}