use axum::{ Json, extract::{Path, State}, }; use pinakes_core::jobs::Job; use crate::{error::ApiError, state::AppState}; 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(), ) } }