diff --git a/src/app/eiffel/web.go b/src/app/eiffel/web.go
index 57d97d7397d1d603858ef52840f77ccac14bd034..1bef247231c9543f1da5a9ff6446416ccb3783d8 100644
--- a/src/app/eiffel/web.go
+++ b/src/app/eiffel/web.go
@@ -646,6 +646,22 @@ func elicitationTemplate(cfg Cfg, appCtx *hctx.AppCtx, webCtx *web.Ctx, defaultF
var mongoClient *mongo.Client
var mongoCollection *mongo.Collection
+var projectCollection *mongo.Collection
+
+// getProjectShortcut retrieves the shortcut for a project by its ProjectID
+func getProjectShortcut(ctx context.Context, projectID string) (string, error) {
+ var project struct {
+ Shortcut string `bson:"shortcut"`
+ }
+
+ err := projectCollection.FindOne(ctx, bson.M{"project_id": projectID}).Decode(&project)
+ if err != nil {
+ log.Printf("Error fetching project shortcut for project_id '%s': %v", projectID, err)
+ return "", err
+ }
+
+ return project.Shortcut, nil
+}
func InitMongoDB() error {
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
@@ -660,6 +676,7 @@ func InitMongoDB() error {
}
mongoCollection = client.Database("harmony").Collection("requirements")
+ projectCollection = client.Database("harmony").Collection("projects")
log.Println("Connected to MongoDB")
return nil
}
@@ -677,6 +694,21 @@ func saveToMongoDB(formData *TemplateFormData) error {
"created_at": time.Now(),
}
+ // Für projektbasierte Anforderungen: UUID und Shortcut hinzufügen
+ if formData.ProjectID != "" {
+ // UUID für diese Anforderung generieren
+ document["uuid"] = uuid.New().String()
+
+ // Shortcut basierend auf Projekt-Kürzel generieren
+ if projectShortcut, err := getProjectShortcut(ctx, formData.ProjectID); err == nil && projectShortcut != "" {
+ // Anzahl der existierenden Anforderungen für dieses Projekt abrufen
+ count, _ := mongoCollection.CountDocuments(ctx, bson.M{"project_id": formData.ProjectID})
+
+ // Shortcut im Format: [PROJECT_SHORTCUT]-REQ-[NUMMER] (z.B. "HM-REQ-001")
+ document["shortcut"] = fmt.Sprintf("%s-REQ-%03d", projectShortcut, count+1)
+ }
+ }
+
_, err := mongoCollection.InsertOne(ctx, document)
return err
}