use axum::{Json, extract::State, http::StatusCode}; use serde::Serialize; use ts_rs::TS; use crate::{db, state::AppState}; #[derive(Serialize, TS)] #[ts(export)] pub struct HealthResponse { /// `ok` veya `degraded` status: &'static str, /// `ok` veya `error` db: &'static str, version: &'static str, } /// Sağlık kontrolü (Dokploy health check bunu kullanır). /// DB erişilemezse 503 döner. pub async fn health(State(state): State) -> (StatusCode, Json) { let version = env!("CARGO_PKG_VERSION"); match db::ping(&state.db).await { Ok(()) => ( StatusCode::OK, Json(HealthResponse { status: "ok", db: "ok", version, }), ), Err(e) => { tracing::warn!(error = %e, "health: veritabanına erişilemiyor"); ( StatusCode::SERVICE_UNAVAILABLE, Json(HealthResponse { status: "degraded", db: "error", version, }), ) } } }