decision_cockpit 0.1.0

Layer — product decision memory with MCP tools and an embedded review dashboard
Documentation
use axum::extract::{Path, Query, State};
use axum::Json;
use serde::Deserialize;
use serde_json::Value;
use uuid::Uuid;

use crate::domain::decisions::Decision;
use crate::error::AppResult;
use crate::services::graph as svc;
use crate::state::AppState;

#[derive(Debug, Deserialize)]
pub struct ListQuery {
    pub status: Option<String>,
    pub limit: Option<i64>,
}

pub async fn list(
    State(state): State<AppState>,
    Query(q): Query<ListQuery>,
) -> AppResult<Json<Vec<Decision>>> {
    let decisions = svc::list_decisions(&state.pool, q.status.as_deref(), q.limit).await?;
    Ok(Json(decisions))
}

/// Returns the decision plus its linked context (assumptions, actions,
/// evidence, relations, drift signals).
pub async fn get_one(
    State(state): State<AppState>,
    Path(id): Path<Uuid>,
) -> AppResult<Json<Value>> {
    let context = svc::get_decision_context(&state.pool, id).await?;
    Ok(Json(serde_json::to_value(context)?))
}