From dd5fc48fb6d1319b135d4fafd02bedaec45209fe Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 23 Feb 2026 14:12:15 +0000 Subject: [PATCH] story-kit: merge 71_bug_server_health_endpoint_missing --- server/src/http/health.rs | 39 +++++++++++++++++++++++++++++++++++++++ server/src/http/mod.rs | 4 ++++ 2 files changed, 43 insertions(+) diff --git a/server/src/http/health.rs b/server/src/http/health.rs index e5b241d..d6c0cdc 100644 --- a/server/src/http/health.rs +++ b/server/src/http/health.rs @@ -1,4 +1,6 @@ use poem::handler; +use poem_openapi::{Object, OpenApi, Tags, payload::Json}; +use serde::Serialize; /// Health check endpoint. /// @@ -7,3 +9,40 @@ use poem::handler; pub fn health() -> &'static str { "ok" } + +#[derive(Tags)] +enum HealthTags { + Health, +} + +#[derive(Serialize, Object)] +pub struct HealthStatus { + status: String, +} + +pub struct HealthApi; + +#[OpenApi(tag = "HealthTags::Health")] +impl HealthApi { + /// Health check endpoint. + /// + /// Returns a JSON status object to confirm the server is running. + #[oai(path = "/health", method = "get")] + async fn health(&self) -> Json { + Json(HealthStatus { + status: "ok".to_string(), + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn api_health_returns_ok_status() { + let api = HealthApi; + let response = api.health().await; + assert_eq!(response.0.status, "ok"); + } +} diff --git a/server/src/http/mod.rs b/server/src/http/mod.rs index b746bcc..b4ac54b 100644 --- a/server/src/http/mod.rs +++ b/server/src/http/mod.rs @@ -18,6 +18,7 @@ use agents::AgentsApi; use anthropic::AnthropicApi; use chat::ChatApi; use context::AppContext; +use health::HealthApi; use io::IoApi; use model::ModelApi; use poem::EndpointExt; @@ -82,6 +83,7 @@ type ApiTuple = ( ChatApi, AgentsApi, SettingsApi, + HealthApi, ); type ApiService = OpenApiService; @@ -96,6 +98,7 @@ pub fn build_openapi_service(ctx: Arc) -> (ApiService, ApiService) { ChatApi { ctx: ctx.clone() }, AgentsApi { ctx: ctx.clone() }, SettingsApi { ctx: ctx.clone() }, + HealthApi, ); let api_service = @@ -109,6 +112,7 @@ pub fn build_openapi_service(ctx: Arc) -> (ApiService, ApiService) { ChatApi { ctx: ctx.clone() }, AgentsApi { ctx: ctx.clone() }, SettingsApi { ctx }, + HealthApi, ); let docs_service =