feat: 持久化 AI 审查结果,文件级内联展示与页面集成

This commit is contained in:
2026-06-19 23:24:06 +08:00
parent a89d057716
commit 0528eee4de
7 changed files with 518 additions and 23 deletions
+33 -1
View File
@@ -63,7 +63,39 @@ func parseReportData(data ReportData) ParsedReview {
noteMap[key] = append(noteMap[key], n.Content)
}
// Try to parse structured analysis result
// Try to parse structured analysis result (new ReviewResult format)
var reviewResult ReviewResult
if err := json.Unmarshal([]byte(data.Result), &reviewResult); err == nil && len(reviewResult.FileReviews) > 0 {
// New format: { file_reviews: [...], summary: {...}, top_n: N }
result.Score = reviewResult.Summary.Score
result.Overall = reviewResult.Summary.Overall
result.Findings = reviewResult.Summary.Findings
result.Recommendations = reviewResult.Summary.Recommendations
for _, fr := range reviewResult.FileReviews {
fileReport := FileReviewForReport{
FileName: fr.FileName,
ChangeLines: fr.ChangeLines,
}
// Collect file-level notes
fileReport.Notes = noteMap["file:"+fr.FileName]
for _, s := range fr.Suggestions {
sug := SuggestionForReport{
Severity: s.Severity,
SeverityCN: severityCN(s.Severity),
Description: s.Description,
Suggestion: s.Suggestion,
CodeExample: s.CodeExample,
}
fileReport.Suggestions = append(fileReport.Suggestions, sug)
}
result.FileReviews = append(result.FileReviews, fileReport)
}
return result
}
// Fallback: try legacy flat format { score, overall, findings, recommendations }
var analysisMap map[string]interface{}
if err := json.Unmarshal([]byte(data.Result), &analysisMap); err == nil {
if score, ok := analysisMap["score"].(float64); ok {