From 0bd9dd7f09b0ef2fe568f6f9c1941291581d4e5a Mon Sep 17 00:00:00 2001 From: alexanderkohler1 <alexander1.kohler@student.reutlingen-university.de> Date: Thu, 19 Jun 2025 00:55:55 +0200 Subject: [PATCH] =?UTF-8?q?Project=20Repository:=20Fix=20f=C3=BCr=20Requir?= =?UTF-8?q?ements=20Dekodierung=20aus=20MongoDB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem war: - Requirements wurden von EIFFEL als verschachtelte Struktur gespeichert (parsing_result.requirement) - Mein Repository hat versucht direkt in RequirementSummary zu dekodieren - Cursor.Decode() wurde zweimal aufgerufen was nicht funktioniert hat Lösung: - Erst in bson.M dekodieren um an alle Felder zu kommen - Dann in RequirementSummary umwandeln - Requirement-Text aus parsing_result.requirement extrahieren - Jetzt werden Shortcuts und Anforderungstexte richtig angezeigt Vorher: "WARN: Skipping invalid requirement document" Nachher: Requirements werden korrekt geladen und angezeigt --- src/app/project/repository.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/app/project/repository.go b/src/app/project/repository.go index 671636f..efa2098 100644 --- a/src/app/project/repository.go +++ b/src/app/project/repository.go @@ -254,16 +254,23 @@ func (r *MongoProjectRepository) FindWithRequirements(ctx context.Context, id pr // Process each requirement document var requirements []*RequirementSummary for cursor.Next(ctx) { - var req RequirementSummary - if err := cursor.Decode(&req); err != nil { + // First decode into a raw document to access nested fields + var doc bson.M + if err := cursor.Decode(&doc); err != nil { log.Printf("WARN: Skipping invalid requirement document: %v", err) - continue // Skip documents that can't be decoded rather than failing entirely + continue + } + + // Convert the raw document to RequirementSummary + var req RequirementSummary + docBytes, _ := bson.Marshal(doc) + if err := bson.Unmarshal(docBytes, &req); err != nil { + log.Printf("WARN: Failed to convert requirement document: %v", err) + continue } // Extract additional fields from nested parsing_result if available // This handles requirements that have been processed by the EIFFEL system - var doc bson.M - cursor.Decode(&doc) if parsingResult, ok := doc["parsing_result"].(bson.M); ok { if requirement, ok := parsingResult["requirement"].(string); ok { req.Requirement = requirement -- GitLab