From 2dae0d01067593e588486a6e4a2ed83c7ced76b1 Mon Sep 17 00:00:00 2001 From: Jakob Havstein Eriksen Date: Fri, 1 Nov 2024 11:06:38 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5Undo=20av=20command=20contexts:=20y?= =?UTF-8?q?oink?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vi har ikke bruk for undo lenger. Nå som alt kjører i en transaksjon, blir alt (inkludert tilstandsendringer på kommandokjeden) uansett rullet tilbake til forrige tilstand når noe går galt. Co-authored-by: Christian Skovborg Gule Co-authored-by: Øydis Kind Refsum --- .../no/nav/helse/mediator/Kommandofabrikk.kt | 3 - .../no/nav/helse/modell/kommando/Command.kt | 2 - .../nav/helse/modell/kommando/MacroCommand.kt | 7 -- .../OpprettKoblingTilHendelseCommand.kt | 4 - .../OpprettKoblingTilUtbetalingCommand.kt | 4 - .../modell/kommando/CommandContextTest.kt | 4 - .../helse/modell/kommando/MacroCommandTest.kt | 103 +----------------- 7 files changed, 3 insertions(+), 124 deletions(-) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt index 8eef1bf7a..71135f48e 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt @@ -458,9 +458,6 @@ internal class Kommandofabrikk( } else { logg.info("${command.name} er suspendert") } - } catch (err: Exception) { - command.undo(commandContext) - throw err } finally { commandContextObservers.forEach { commandContext.avregistrerObserver(it) } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/Command.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/Command.kt index 30f5cf8ab..df89af44d 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/Command.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/Command.kt @@ -5,8 +5,6 @@ internal interface Command { fun resume(context: CommandContext) = true - fun undo(context: CommandContext) {} - fun hash(): String = name val name: String get() = this::class.java.simpleName diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/MacroCommand.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/MacroCommand.kt index d0173c099..30e6845b3 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/MacroCommand.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/MacroCommand.kt @@ -31,13 +31,6 @@ internal abstract class MacroCommand : Command { return run(context, commands.subList(currentIndex, commands.size)) } - final override fun undo(context: CommandContext) { - logg.info("Reverserer utførelse av ${this::class.simpleName}") - context.register(this) - historikk.forEach { it.undo(context) } - context.clear() - } - final override fun hash(): String { return name + commands.joinToString { it.hash() } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilHendelseCommand.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilHendelseCommand.kt index d3d3d7009..d4b8d504a 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilHendelseCommand.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilHendelseCommand.kt @@ -15,8 +15,4 @@ internal class OpprettKoblingTilHendelseCommand( vedtakDao.opprettKobling(vedtaksperiodeId, meldingId) return true } - - override fun undo(context: CommandContext) { - vedtakDao.fjernKobling(vedtaksperiodeId, meldingId) - } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilUtbetalingCommand.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilUtbetalingCommand.kt index 3cc483796..45f02bad4 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilUtbetalingCommand.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/OpprettKoblingTilUtbetalingCommand.kt @@ -12,8 +12,4 @@ internal class OpprettKoblingTilUtbetalingCommand( utbetalingRepository.opprettKobling(vedtaksperiodeId, utbetalingId) return true } - - override fun undo(context: CommandContext) { - utbetalingRepository.fjernKobling(vedtaksperiodeId, utbetalingId) - } } diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/CommandContextTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/CommandContextTest.kt index f7d09f788..198186935 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/CommandContextTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/CommandContextTest.kt @@ -233,7 +233,6 @@ internal class CommandContextTest { ) : Command { var executed = false var resumed = false - var undo = false val id: UUID = HENDELSE @@ -247,8 +246,5 @@ internal class CommandContextTest { return resumeAction(this) } - override fun undo(context: CommandContext) { - undo = true - } } } diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/MacroCommandTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/MacroCommandTest.kt index 30dcb7ecc..427d3d89a 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/MacroCommandTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/kommando/MacroCommandTest.kt @@ -1,19 +1,18 @@ package no.nav.helse.modell.kommando import no.nav.helse.modell.kommando.CommandContext.Companion.ferdigstill +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertDoesNotThrow -import java.util.* -import org.junit.jupiter.api.Assertions.assertEquals +import java.util.UUID internal class MacroCommandTest { private val constants: MutableList = mutableListOf() private var executeCount: Int = 0 private var resumeCount: Int = 0 - private var undoCount: Int = 0 private lateinit var context: CommandContext @@ -22,7 +21,6 @@ internal class MacroCommandTest { constants.clear() executeCount = 0 resumeCount = 0 - undoCount = 0 context = CommandContext(UUID.randomUUID()) } @@ -116,91 +114,6 @@ internal class MacroCommandTest { assertRekkefølge("A", "B før") } - @Test - fun `Undo gjør ingenting dersom ingen kommandoer er kjørt`() { - val macroCommand = - command( - execute = { constants.add("B før"); true }, - undo = { constants.add("B etter") } - ) + - command( - execute = { constants.add("C før"); true }, - undo = { constants.add("C etter") } - ) - macroCommand.undo(context) - assertRekkefølge() - assertTellere(0, 0, 0) - } - - @Test - fun `Undo reverserer alle kommandoer`() { - val macroCommand = - command( - execute = { constants.add("B før"); true }, - undo = { constants.add("B etter") } - ) + - command( - execute = { constants.add("C før"); true }, - undo = { constants.add("C etter") } - ) - macroCommand.execute(context) - macroCommand.undo(context) - assertRekkefølge("B før", "C før", "C etter", "B etter") - assertTellere(2, 0, 2) - } - - @Test - fun `Undo reverserer alle kjørte kommandoer når en kommando suspender`() { - val macroCommand = - command( - execute = { constants.add("B før"); false }, - undo = { constants.add("B etter") } - ) + - command( - execute = { constants.add("C før"); true }, - undo = { constants.add("C etter") } - ) - macroCommand.execute(context) - macroCommand.undo(context) - assertRekkefølge("B før", "B etter") - assertTellere(1, 0, 1) - } - - @Test - fun `Undo reverserer riktig etter restore`() { - val macroCommand = - command( - execute = { constants.add("B før"); false }, - undo = { constants.add("B etter") } - ) + - command( - execute = { constants.add("C før"); true }, - undo = { constants.add("C etter") } - ) - macroCommand.undo(CommandContext(UUID.randomUUID(), listOf(1))) - assertRekkefølge("C etter", "B etter") - assertTellere(0, 0, 2) - } - - @Test - fun `Undo reverserer riktig etter resume`() { - val macroCommand = - command( - execute = { constants.add("B før"); true }, - undo = { constants.add("B undo") } - ) + - command( - execute = { constants.add("C før"); false }, - resume = { constants.add("C etter"); true }, - undo = { constants.add("C undo") } - ) - context = CommandContext(UUID.randomUUID(), listOf(1)) - macroCommand.resume(context) - macroCommand.undo(context) - assertRekkefølge("C etter", "C undo", "B undo") - assertTellere(0, 1, 2) - } - @Test fun `Utfører ikke commands etter at context er ferdigstilt i execute`() { val macroCommand = @@ -230,19 +143,13 @@ internal class MacroCommandTest { assertEquals(konstanter.toList(), constants) } - private fun assertTellere(expectedExecuteCount: Int, expectedResumeCount: Int, expectedUndoCount: Int) { - assertEquals(expectedExecuteCount, executeCount) - assertEquals(expectedResumeCount, resumeCount) - assertEquals(expectedUndoCount, undoCount) - } - private operator fun Command.plus(other: Command): MacroCommand { return object : MacroCommand() { override val commands: List = listOf(this@plus, other) } } - private fun command(execute: Command.(context: CommandContext) -> Boolean, resume: Command.(context: CommandContext) -> Boolean = { true }, undo: () -> Unit = {}): Command { + private fun command(execute: Command.(context: CommandContext) -> Boolean, resume: Command.(context: CommandContext) -> Boolean = { true }): Command { return object : Command { override fun execute(context: CommandContext): Boolean { executeCount += 1 @@ -254,10 +161,6 @@ internal class MacroCommandTest { return resume(this, context) } - override fun undo(context: CommandContext) { - undoCount += 1 - return undo() - } } } }