From 240c000f12948ddd7b602b27a8606bd09bad5ae4 Mon Sep 17 00:00:00 2001
From: ColinJakob <colin.jakob@student.reutlingen-university.de>
Date: Thu, 19 Jun 2025 19:33:39 +0200
Subject: [PATCH] Clone Requirement handles the cloning of a requirement to a
 different project

---
 src/app/project/service.go | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/app/project/service.go b/src/app/project/service.go
index dfbdbd7..c414b92 100644
--- a/src/app/project/service.go
+++ b/src/app/project/service.go
@@ -194,3 +194,27 @@ func (s *ProjectService) SearchProjects(ctx context.Context, query string, userI
 	log.Printf("INFO: Search completed - found %d projects for query '%s'", len(projects), query)
 	return projects, nil
 }
+
+// CloneRequirement handles the cloning of a requirement to a different project
+func (s *ProjectService) CloneRequirement(ctx context.Context, sourceReqID primitive.ObjectID, targetProjectID string, newName string) error {
+	log.Printf("INFO: Cloning requirement %s to project %s with name '%s'", sourceReqID.Hex(), targetProjectID, newName)
+
+	// Validate that the target project exists
+	targetProject, err := s.repo.FindByProjectID(ctx, targetProjectID)
+	if err != nil {
+		log.Printf("ERROR: Target project '%s' not found: %v", targetProjectID, err)
+		return fmt.Errorf("target project not found")
+	}
+
+	log.Printf("DEBUG: Target project '%s' found, proceeding with clone", targetProject.Name)
+
+	// Delegate to repository for the actual cloning operation
+	err = s.repo.CloneRequirement(ctx, sourceReqID, targetProjectID, newName)
+	if err != nil {
+		log.Printf("ERROR: Failed to clone requirement %s: %v", sourceReqID.Hex(), err)
+		return err
+	}
+
+	log.Printf("INFO: Requirement cloned successfully to project '%s'", targetProject.Name)
+	return nil
+}
-- 
GitLab