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