From 86fb222d187f70cd11f8cc3862930a0452665662 Mon Sep 17 00:00:00 2001 From: GW_MC <72297530+GWMCwing@users.noreply.github.com> Date: Thu, 18 Dec 2025 22:19:16 +0800 Subject: [PATCH] added serving openapi options --- apps/api/src/cmd/start_server.rs | 16 +++++++++++++++- apps/api/src/configs/key.rs | 1 + apps/api/src/configs/server.rs | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/api/src/cmd/start_server.rs b/apps/api/src/cmd/start_server.rs index e602258..4292718 100644 --- a/apps/api/src/cmd/start_server.rs +++ b/apps/api/src/cmd/start_server.rs @@ -87,7 +87,21 @@ pub async fn start_server() { // build the axum app and run the server... info!("Starting application..."); - let app: Router = routes::get_root_router(Arc::new(get_app_state(&db_connection, &settings))); + let mut app: Router = + routes::get_root_router(Arc::new(get_app_state(&db_connection, &settings))); + + if settings.server.serve_openapi { + info!("Enabling OpenAPI documentation endpoint at /openapi.json"); + app = app.route( + "/openapi.json", + axum::routing::get(|| async { + use utoipa::OpenApi; + let doc = routes::ApiDoc::openapi(); + doc.to_pretty_json() + .expect("Failed to serialize OpenAPI doc to JSON") + }), + ); + } let address = format!("{}:{}", settings.server.address, settings.server.port); info!("Starting server at http://{}", address); diff --git a/apps/api/src/configs/key.rs b/apps/api/src/configs/key.rs index c4a0ee9..0bc3baf 100644 --- a/apps/api/src/configs/key.rs +++ b/apps/api/src/configs/key.rs @@ -3,6 +3,7 @@ pub(crate) const LOGGING_UTC_KEY: &str = "LOGGING.UTC"; // pub(crate) const SERVER_ADDRESS_KEY: &str = "SERVER.ADDRESS"; pub(crate) const SERVER_PORT_KEY: &str = "SERVER.PORT"; +pub(crate) const SERVER_SERVE_OPENAPI_KEY: &str = "SERVER.SERVE_OPENAPI"; // pub(crate) const DATABASE_URL_KEY: &str = "DATABASE.URL"; pub(crate) const DATABASE_MAX_CONNECTIONS_KEY: &str = "DATABASE.MAX_CONNECTIONS"; diff --git a/apps/api/src/configs/server.rs b/apps/api/src/configs/server.rs index 16e6bee..a79ce14 100644 --- a/apps/api/src/configs/server.rs +++ b/apps/api/src/configs/server.rs @@ -3,6 +3,8 @@ use std::net::IpAddr; use config::{Config, ConfigError}; use tracing::warn; +use crate::configs::key::SERVER_SERVE_OPENAPI_KEY; + use super::{ FromConfig, key::{SERVER_ADDRESS_KEY, SERVER_PORT_KEY}, @@ -12,6 +14,7 @@ use super::{ pub struct ServerSettings { pub address: IpAddr, pub port: u16, + pub serve_openapi: bool, } impl FromConfig for ServerSettings { @@ -43,6 +46,17 @@ impl FromConfig for ServerSettings { ); DEFAULT_PORT }) as u16, + + serve_openapi: _config + .get_bool(SERVER_SERVE_OPENAPI_KEY) + .unwrap_or_else(|err| { + const DEFAULT_SERVE_OPENAPI: bool = false; + warn!( + "{} not set or invalid in configuration, defaulting to {}. Error: {}", + SERVER_SERVE_OPENAPI_KEY, DEFAULT_SERVE_OPENAPI, err + ); + DEFAULT_SERVE_OPENAPI + }), }) }