use axum::Json; use axum::extract::{Path, State}; use crate::error::ApiError; use crate::state::AppState; use pinakes_core::jobs::Job; pub async fn list_jobs(State(state): State) -> Json> { Json(state.job_queue.list().await) } pub async fn get_job( State(state): State, Path(id): Path, ) -> Result, ApiError> { state.job_queue.status(id).await.map(Json).ok_or_else(|| { pinakes_core::error::PinakesError::NotFound(format!("job not found: {id}")).into() }) } pub async fn cancel_job( State(state): State, Path(id): Path, ) -> Result, ApiError> { let cancelled = state.job_queue.cancel(id).await; if cancelled { Ok(Json(serde_json::json!({ "cancelled": true }))) } else { Err(pinakes_core::error::PinakesError::NotFound(format!( "job not found or already finished: {id}" )) .into()) } }