Skip to content

Commit 46a7c89

Browse files
committed
Handle saving failed transformation results
1 parent 4a7e824 commit 46a7c89

7 files changed

Lines changed: 28 additions & 15 deletions

File tree

base/src/main/kotlin/org/sinytra/probe/base/db/Project.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ data class Project(
1313
val id: String,
1414

1515
val internalModId: Long,
16-
val modid: String?,
1716

1817
val internalId: Long? = null
1918
)

core/src/main/kotlin/org/sinytra/probe/core/db/ProjectMapping.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,5 @@ fun daoToModel(dao: ProjectDAO) = Project(
2727
ProjectPlatform.valueOf(dao.platform),
2828
dao.projectId,
2929
dao.mod.id.value,
30-
dao.mod.modid,
31-
dao.id.value,
30+
dao.id.value
3231
)

core/src/main/kotlin/org/sinytra/probe/core/model/ModRepository.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.sinytra.probe.core.db.suspendTransaction
99

1010
interface ModRepository {
1111
suspend fun allMods(): List<Mod>
12+
suspend fun modById(id: Long): Mod?
1213
suspend fun modByModid(modid: String): Mod?
1314
suspend fun addMod(mod: Mod): Mod
1415
suspend fun removeMod(modid: String): Boolean
@@ -18,6 +19,10 @@ class PostgresModRepository : ModRepository {
1819
override suspend fun allMods(): List<Mod> = suspendTransaction {
1920
ModDAO.all().map(::daoToModel)
2021
}
22+
23+
override suspend fun modById(id: Long): Mod? = suspendTransaction {
24+
ModDAO.findById(id)?.let(::daoToModel)
25+
}
2126

2227
override suspend fun modByModid(modid: String): Mod? = suspendTransaction {
2328
ModDAO

core/src/main/kotlin/org/sinytra/probe/core/model/ProjectRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class PostgresProjectRepository : ProjectRepository {
3333
}
3434

3535
override suspend fun addProject(project: Project): Project = suspendTransaction {
36-
val dbMod = ModDAO.find { ModTable.modid eq project.modid }.single()
36+
val dbMod = ModDAO.find { ModTable.id eq project.internalModId }.single()
3737
ProjectDAO.new {
3838
platform = project.platform.toString()
3939
projectId = project.id

core/src/main/kotlin/org/sinytra/probe/core/service/AsyncTransformationRunner.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ class AsyncTransformationRunner(
5858

5959
suspend fun computeAndSave(project: PlatformProject, resolved: ResolvedProject, testEnvironment: TestEnvironment): TestResult {
6060
val result = transfomer.runTransformation(resolved, testEnvironment.gameVersion)
61-
val testResult = mutex.withLock { persistence.saveResult(project, result.modid, result.version, result.success, testEnvironment) }
61+
val testResult = mutex.withLock {
62+
persistence.saveResult(project, result.modid, result.version, result.success, testEnvironment)
63+
}
6264
return testResult
6365
}
6466
}

core/src/main/kotlin/org/sinytra/probe/core/service/PersistenceService.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.sinytra.probe.core.service
22

3+
import kotlinx.coroutines.coroutineScope
34
import org.sinytra.probe.base.db.Project
45
import org.sinytra.probe.core.model.*
56
import org.sinytra.probe.core.platform.PlatformProject
@@ -22,12 +23,14 @@ class PersistenceService(
2223
return results.getTestResultFor(dbProject.internalModId, testEnvironment)
2324
}
2425

25-
// TODO Account for failed transformations
26-
suspend fun saveResult(project: PlatformProject, modid: String, versionId: String, passing: Boolean, testEnvironment: TestEnvironment): TestResult {
27-
val mod = mods.modByModid(modid) ?: mods.addMod(Mod(id = 0, modid = modid, projects = listOf()))
28-
29-
val dbProject = projects.projectByPlatformAndId(project.platform, project.id)
30-
?: projects.addProject(Project(platform = project.platform, id = project.id, internalModId = mod.id, modid = mod.modid))
26+
suspend fun saveResult(project: PlatformProject, modid: String?, versionId: String, passing: Boolean, testEnvironment: TestEnvironment): TestResult {
27+
val (dbProject, mod) = projects.projectByPlatformAndId(project.platform, project.id)
28+
?.let { it to mods.modById(it.internalModId)!! }
29+
?: coroutineScope {
30+
val mod = mods.addMod(Mod(id = 0, modid = modid, projects = listOf()))
31+
val saved = projects.addProject(Project(platform = project.platform, id = project.id, internalModId = mod.id))
32+
saved to mod
33+
}
3134

3235
if (dbProject !in mod.projects) {
3336
projects.assignModToProject(dbProject, mod)

core/src/main/kotlin/org/sinytra/probe/core/service/TransformationService.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ data class TransformationResult(
1919
val version: String,
2020
val dependencyProjectId: List<String>,
2121
val success: Boolean,
22-
val modid: String
22+
val modid: String?
2323
)
2424

2525
@OptIn(ExperimentalPathApi::class)
@@ -47,16 +47,21 @@ class TransformationService(
4747
}
4848
workDir.createDirectories()
4949

50-
val result = runTransformer(workDir, allFiles, gameFiles.cleanFile, classPath, gameVersion)
50+
val result = try {
51+
runTransformer(workDir, allFiles, gameFiles.cleanFile, classPath, gameVersion)
52+
} catch (e: Exception) {
53+
LOGGER.error("Error transforming project ${mainFile.projectId} version ${mainFile.versionId}", e)
54+
null
55+
}
5156

5257
workDir.deleteRecursively()
5358

5459
return TransformationResult(
5560
project.version.projectId,
5661
project.version.versionId,
5762
otherFiles.map(ProjectVersion::projectId),
58-
result.success,
59-
result.primaryModid
63+
result?.success ?: false,
64+
result?.primaryModid
6065
)
6166
}
6267

0 commit comments

Comments
 (0)