diff --git a/src/app/project/repository.go b/src/app/project/repository.go index 671636fbbe512d8560be0f676c5a2fe5c67d1636..efa2098b3e48d8c140b2a59117f546f3f8790b25 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