From b5686e6e95550af4e36027a80c3d7f2dd498fa1e Mon Sep 17 00:00:00 2001
From: Jan-Niclas Struewer <j.n.struewer@gmail.com>
Date: Fri, 22 Nov 2024 10:47:43 +0100
Subject: [PATCH] hotfix: fixed race condition in transactional context

---
 .../controller/RepositoryController.kt        | 21 +++++++++++++------
 .../iem/app/toolRun/service/ToolRunService.kt |  9 ++++----
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt
index d3099f1..e0561b8 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/controller/RepositoryController.kt
@@ -166,13 +166,22 @@ class RepositoryController(
                 false
             }
 
-        val toolRun =
-            toolRunService.getToolRunForRepository(
-                projectId = id,
-                includeFindings = isProjectMember,
-            ) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "tool run not found")
+        val toolRunDto =
+            repositoryService.getToolRunByProjectId(projectId = id)
+                ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "tool run not found")
+
+        val response =
+            if (isProjectMember) {
+                toolRunService.getFindingsForToolRun(
+                    projectId = id,
+                    includeFindings = isProjectMember,
+                    toolRun = toolRunDto,
+                )
+            } else {
+                toolRunDto
+            }
 
-        return ToolRunResponseDto(isProjectMember = isProjectMember, toolRun = toolRun)
+        return ToolRunResponseDto(isProjectMember = isProjectMember, toolRun = response)
     }
 
     @PostMapping(ApiPaths.REPOSITORY_UPDATE_CONSENT)
diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
index 4cc7d02..d742077 100644
--- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
@@ -142,17 +142,16 @@ class ToolRunService(
      * This method retrieves the tool run stored for the given repository. Additionally, it queries
      * the tool APIs for all tools contained in the tool run and create finding objects for them.
      */
-    suspend fun getToolRunForRepository(
+    suspend fun getFindingsForToolRun(
         projectId: Long,
+        toolRun: ToolRunDto,
         includeFindings: Boolean = false,
-    ): ToolRunDto? {
-
-        val toolRun = repositoryService.getToolRunByProjectId(projectId = projectId)
+    ): ToolRunDto {
 
         val apiJobs: MutableList<Job> = mutableListOf()
 
         if (includeFindings) {
-            toolRun?.tools?.forEach { tool ->
+            toolRun.tools.forEach { tool ->
                 when (tool.toolType) {
                     ToolType.ORT -> {
                         apiJobs.add(
-- 
GitLab