use axum::Json;
use axum::extract::State;
use axum::http::StatusCode;
use chrono::{DateTime, Utc};
use serde::Serialize;
use tracing::warn;
use super::AppState;
#[derive(Serialize, sqlx::FromRow)]
pub struct CheckRow {
pub pc_id: String,
pub check_name: String,
pub status: String,
pub detail: Option<String>,
pub recorded_at: DateTime<Utc>,
}
pub async fn list_all(
State(state): State<AppState>,
) -> Result<Json<Vec<CheckRow>>, (StatusCode, String)> {
let rows: Vec<CheckRow> = sqlx::query_as(
"SELECT pc_id, check_name, status, detail, recorded_at
FROM check_status
ORDER BY check_name, pc_id",
)
.fetch_all(&state.pool)
.await
.map_err(|e| {
warn!(error = %e, "check_status query");
(StatusCode::INTERNAL_SERVER_ERROR, e.to_string())
})?;
Ok(Json(rows))
}