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