perf: N+1 Query Fix — ListHazards 231x schneller

Ersetzt 231 einzelne DB-Queries durch 1 Batch-Query mit
DISTINCT ON (hazard_id) JOIN. Ladezeit von ~40s auf <1s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-08 00:28:15 +02:00
parent 136dc4d553
commit 6cec1dcdba
2 changed files with 48 additions and 5 deletions
@@ -148,19 +148,19 @@ func (h *IACEHandler) ListHazards(c *gin.Context) {
hazards = []iace.Hazard{}
}
// Enrich hazards with latest risk assessment
// Enrich hazards with latest risk assessment (single batch query instead of N+1)
type enrichedHazard struct {
iace.Hazard
RiskAssessment interface{} `json:"risk_assessment"`
}
assessmentMap, _ := h.store.GetLatestAssessmentsByProject(c.Request.Context(), projectID)
enriched := make([]enrichedHazard, len(hazards))
for i, hz := range hazards {
enriched[i] = enrichedHazard{Hazard: hz}
// Get latest assessment for this hazard
assessments, err := h.store.ListAssessments(c.Request.Context(), hz.ID)
if err == nil && len(assessments) > 0 {
enriched[i].RiskAssessment = assessments[len(assessments)-1]
if ra, ok := assessmentMap[hz.ID]; ok {
enriched[i].RiskAssessment = ra
}
}