From 4de6356e14913010edf3ce6409c1195ec835f1ce Mon Sep 17 00:00:00 2001
From: Jan-Niclas Struewer <j.n.struewer@gmail.com>
Date: Thu, 14 Dec 2023 17:38:55 +0100
Subject: [PATCH] make tool run db return optional

---
 .../repository/controller/RepositoryController.kt    | 12 ++++++++----
 .../repository/service/RepositoryService.kt          | 12 +++++++-----
 .../toolRun/repository/ToolRunRepository.kt          |  2 +-
 .../dataprovider/toolRun/service/ToolRunService.kt   | 12 ++++++------
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/controller/RepositoryController.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/controller/RepositoryController.kt
index 09da2fba..6037e03e 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/controller/RepositoryController.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/controller/RepositoryController.kt
@@ -171,12 +171,16 @@ class RepositoryController(
             false
         }
 
+        val toolRun = toolRunService.getToolRunForRepository(
+            projectId = id,
+            includeFindings = isProjectMember
+        ) ?: throw ResponseStatusException(
+            HttpStatus.NOT_FOUND, "tool run not found"
+        )
+
         return ToolRunResponseDto(
             isProjectMember = isProjectMember,
-            toolRun = toolRunService.getToolRunForRepository(
-                projectId = id,
-                includeFindings = isProjectMember
-            ).await()
+            toolRun = toolRun
         )
     }
 
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
index e5e39e18..55e5ea3b 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/repository/service/RepositoryService.kt
@@ -88,11 +88,13 @@ class RepositoryService(
     }
 
     @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
-    fun getToolRunByProjectId(projectId: Long): ToolRunDto {
-        val toolEntity = toolRunRepository.findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId)
-        return ToolRunDto.getDtoFromEntity(
-            toolEntity
-        )
+    fun getToolRunByProjectId(projectId: Long): ToolRunDto? {
+        toolRunRepository.findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId)?.let { toolRunEntity ->
+            return ToolRunDto.getDtoFromEntity(
+                toolRunEntity
+            )
+        }
+        return null
     }
 
     @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/repository/ToolRunRepository.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/repository/ToolRunRepository.kt
index 14237190..0f222226 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/repository/ToolRunRepository.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/repository/ToolRunRepository.kt
@@ -8,5 +8,5 @@ import java.util.*
 
 @Transactional(propagation = Propagation.MANDATORY)
 interface ToolRunRepository : JpaRepository<ToolRunEntity, UUID> {
-    fun findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId: Long): ToolRunEntity
+    fun findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId: Long): ToolRunEntity?
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/service/ToolRunService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/service/ToolRunService.kt
index aa8dfc74..62ac29ce 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/service/ToolRunService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/toolRun/service/ToolRunService.kt
@@ -5,7 +5,6 @@ import de.fraunhofer.iem.dataprovider.logger.getLogger
 import de.fraunhofer.iem.dataprovider.repository.service.RepositoryService
 import de.fraunhofer.iem.dataprovider.tool.enumeration.ToolType
 import de.fraunhofer.iem.dataprovider.toolRun.dto.ToolRunDto
-import de.fraunhofer.iem.dataprovider.toolRun.repository.ToolRunRepository
 import de.fraunhofer.iem.dataprovider.tools.gitlab.service.RepositoryDetailsService
 import de.fraunhofer.iem.dataprovider.tools.occmd.service.OccmdService
 import de.fraunhofer.iem.dataprovider.tools.ort.service.OrtService
@@ -19,7 +18,6 @@ class ToolRunService(
     private val kpiService: KPIService,
     private val ortService: OrtService,
     private val occmdService: OccmdService,
-    private val toolRunRepository: ToolRunRepository,
     private val repositoryService: RepositoryService
 ) {
 
@@ -122,15 +120,17 @@ class ToolRunService(
     suspend fun getToolRunForRepository(
         projectId: Long,
         includeFindings: Boolean = false
-    ): Deferred<ToolRunDto> = defaultScope.async {
+    ): ToolRunDto? {
 
-        val toolRun = repositoryService.getToolRunByProjectId(projectId = projectId)
+        val toolRun = withContext(Dispatchers.IO) {
+            repositoryService.getToolRunByProjectId(projectId = projectId)
+        }
 
 
         val apiJobs: MutableList<Job> = mutableListOf()
 
         if (includeFindings) {
-            toolRun.tools.forEach { tool ->
+            toolRun?.tools?.forEach { tool ->
                 when (tool.toolType) {
                     ToolType.ORT -> {
                         apiJobs.add(
@@ -157,7 +157,7 @@ class ToolRunService(
             }
         }
 
-        return@async toolRun
+        return toolRun
     }
 
 
-- 
GitLab