use crate::server::app::AppState;
use axum::extract::State;
use axum::routing::{get, post};
use axum::{Json, Router};
use serde::Serialize;
pub(crate) fn public() -> Router<AppState> {
Router::new().route("/api/health", get(health))
}
pub(crate) fn authenticated() -> Router<AppState> {
Router::new().route("/api/daemon/shutdown", post(shutdown))
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct HealthEnvelope {
ok: bool,
app: &'static str,
version: &'static str,
pid: u32,
owner_id: String,
}
async fn health(State(state): State<AppState>) -> Json<HealthEnvelope> {
Json(HealthEnvelope {
ok: true,
app: "nomoreide",
version: env!("CARGO_PKG_VERSION"),
pid: std::process::id(),
owner_id: state.owner_id,
})
}
#[derive(Serialize)]
struct ShutdownEnvelope {
ok: bool,
}
async fn shutdown(State(state): State<AppState>) -> Json<ShutdownEnvelope> {
let _ = state
.shutdown
.try_send(crate::server::ShutdownRequest::Requested);
Json(ShutdownEnvelope { ok: true })
}