@@ -9,10 +9,12 @@ import kotlinx.coroutines.awaitAll
99import kotlinx.coroutines.coroutineScope
1010import org.sinytra.probe.base.*
1111import org.sinytra.probe.base.db.ProjectPlatform
12+ import org.sinytra.probe.core.model.TestEnvironment
1213import org.sinytra.probe.core.model.TestResult
1314import org.sinytra.probe.core.platform.GlobalPlatformService
1415import org.sinytra.probe.core.platform.ModrinthPlatform.Companion.LOADER_FABRIC
1516import org.sinytra.probe.core.platform.ModrinthPlatform.Companion.LOADER_NEOFORGE
17+ import org.sinytra.probe.core.platform.PlatformProject
1618import org.sinytra.probe.core.service.AsyncTransformationRunner
1719import org.sinytra.probe.core.service.PersistenceService
1820import org.sinytra.probe.core.service.SetupService
@@ -65,21 +67,20 @@ class RoutingImpl(
6567 )
6668 }
6769
68- val resolved = platforms.resolveProject(project, body.gameVersion)
69- ? : return call.respond(
70- TestResponseBody .Unavailable (
71- LOADER_FABRIC ,
72- body.gameVersion,
73- testProject,
74- ResultType .UNAVAILABLE
75- )
76- )
77-
7870 liveResourceLock.read {
7971 val neoForgeVersion = setup.getNeoForgeVersion(body.gameVersion)
8072 val transformer = setup.getTransformLib(body.gameVersion)
8173 val testEnvironment = persistence.getOrCreateTestEnvironment(transformer.version, body.gameVersion, neoForgeVersion)
82- val result: TestResult = asyncTransform.transform(project, resolved, testEnvironment)
74+
75+ val result: TestResult = getOrRunTest(project, testEnvironment)
76+ ? : return call.respond(
77+ TestResponseBody .Unavailable (
78+ LOADER_FABRIC ,
79+ body.gameVersion,
80+ testProject,
81+ ResultType .UNAVAILABLE
82+ )
83+ )
8384
8485 val version = platforms.getVersion(project, result.versionId)
8586 val envDto = TestEnvironmentDTO (testEnvironment.connectorVersion, testEnvironment.gameVersion, testEnvironment.neoForgeVersion)
@@ -101,6 +102,15 @@ class RoutingImpl(
101102 }
102103 }
103104
105+ suspend fun getOrRunTest (project : PlatformProject , testEnvironment : TestEnvironment ): TestResult ? {
106+ val existing = persistence.getExistingResult(project, testEnvironment)
107+ if (existing != null ) {
108+ return existing
109+ }
110+ val resolved = platforms.resolveProject(project, testEnvironment.gameVersion) ? : return null
111+ return asyncTransform.transform(project, resolved, testEnvironment)
112+ }
113+
104114 suspend fun importTestReport (body : TestReport ) = coroutineScope {
105115 LOGGER .info(" Importing ${body.results.size} test results" )
106116
0 commit comments