From dcc6c4d28d0d165b9468552daf268d0f632afb69 Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Mon, 6 Apr 2026 20:13:53 +0100 Subject: [PATCH] fix: report endpoint reads report.md from workspace, clean ReportView --- src/api/workflows.rs | 23 +++- web/src/api.ts | 2 +- web/src/components/AppLayout.vue | 2 +- web/src/components/ReportView.vue | 206 +++++------------------------- 4 files changed, 53 insertions(+), 180 deletions(-) diff --git a/src/api/workflows.rs b/src/api/workflows.rs index 1cbd8d6..ad47203 100644 --- a/src/api/workflows.rs +++ b/src/api/workflows.rs @@ -16,6 +16,7 @@ use super::{ApiResult, db_err}; #[derive(serde::Serialize)] struct ReportResponse { + project_id: String, report: String, } @@ -181,11 +182,25 @@ async fn get_report( .await .map_err(db_err)?; - match wf { - Some(w) if !w.report.is_empty() => Ok(Json(ReportResponse { report: w.report })), - Some(_) => Err((StatusCode::NOT_FOUND, "Report not yet generated").into_response()), - None => Err((StatusCode::NOT_FOUND, "Workflow not found").into_response()), + let wf = match wf { + Some(w) => w, + None => return Err((StatusCode::NOT_FOUND, "Workflow not found").into_response()), + }; + + // Read report.md from workspace + let workspace_root = if std::path::Path::new("/app/data/workspaces").is_dir() { + "/app/data/workspaces" + } else { + "data/workspaces" + }; + let report_path = format!("{}/{}/report.md", workspace_root, wf.project_id); + let report = tokio::fs::read_to_string(&report_path).await.unwrap_or_default(); + + if report.is_empty() { + return Err((StatusCode::NOT_FOUND, "report.md not found").into_response()); } + + Ok(Json(ReportResponse { project_id: wf.project_id, report })) } async fn get_plan( diff --git a/web/src/api.ts b/web/src/api.ts index 1b66d07..92197d8 100644 --- a/web/src/api.ts +++ b/web/src/api.ts @@ -67,7 +67,7 @@ export const api = { }), getReport: (workflowId: string) => - request<{ report: string }>(`/workflows/${workflowId}/report`), + request<{ project_id: string; report: string }>(`/workflows/${workflowId}/report`), listPlanSteps: (workflowId: string) => request(`/workflows/${workflowId}/plan`), diff --git a/web/src/components/AppLayout.vue b/web/src/components/AppLayout.vue index fb62bd4..4460d7c 100644 --- a/web/src/components/AppLayout.vue +++ b/web/src/components/AppLayout.vue @@ -289,7 +289,7 @@ function goHome() {