Skip to content

Commit

Permalink
♻️ Flytt JsonMessage-bygging til CommandContextTilstandMediator
Browse files Browse the repository at this point in the history
CommandContextTilstandMediator er ansvarlig for å putte meldingen på
kafka, så det er naturlig at mapping til dette formatet skjer her

Co-authored-by: Jakob Havstein Eriksen <[email protected]>
  • Loading branch information
chsko and havstein committed Nov 1, 2024
1 parent e72690d commit 3933bdb
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 73 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
package no.nav.helse.mediator

import no.nav.helse.mediator.meldinger.Personmelding
import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.MessageContext
import org.slf4j.LoggerFactory

internal interface CommandContextObserver : UtgåendeMeldingerObserver {
fun tilstandEndret(
nyTilstand: String,
hendelse: String,
) {}
fun tilstandEndret(hendelse: KommandokjedeEndretEvent) {}
}

internal class CommandContextTilstandMediator : CommandContextObserver {
private val utgåendeTilstandEndringer = mutableListOf<Pair<String, String>>()

override fun tilstandEndret(
nyTilstand: String,
hendelse: String,
) {
utgåendeTilstandEndringer.add(nyTilstand to hendelse)
override fun tilstandEndret(hendelse: KommandokjedeEndretEvent) {
val message = JsonMessage.newMessage(hendelse.eventName, hendelse.detaljer()).toJson()
utgåendeTilstandEndringer.add(hendelse::class.simpleName!! to message)
}

internal fun publiserTilstandsendringer(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package no.nav.helse.mediator

import java.util.UUID

sealed class KommandokjedeEndretEvent {
abstract val commandContextId: UUID
abstract val hendelseId: UUID

abstract val eventName: String

fun detaljer(): Map<String, Any> =
mapOf(
"commandContextId" to commandContextId,
"meldingId" to hendelseId,
) + ekstraDetaljer()

protected open fun ekstraDetaljer(): Map<String, Any> = emptyMap()

class Ferdig(
private val kommandonavn: String,
override val commandContextId: UUID,
override val hendelseId: UUID,
) : KommandokjedeEndretEvent() {
override val eventName: String = "kommandokjede_ferdigstilt"

override fun ekstraDetaljer(): Map<String, Any> {
return mapOf("command" to kommandonavn)
}
}

class Suspendert(
private val kommandonavn: String,
override val commandContextId: UUID,
override val hendelseId: UUID,
) : KommandokjedeEndretEvent() {
override val eventName: String = "kommandokjede_suspendert"

override fun ekstraDetaljer(): Map<String, Any> {
return mapOf("command" to kommandonavn)
}
}

class Avbrutt(
override val commandContextId: UUID,
override val hendelseId: UUID,
) : KommandokjedeEndretEvent() {
override val eventName: String = "kommandokjede_avbrutt"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package no.nav.helse.modell.kommando
import net.logstash.logback.argument.StructuredArguments.keyValue
import no.nav.helse.db.CommandContextRepository
import no.nav.helse.mediator.CommandContextObserver
import no.nav.helse.mediator.KommandokjedeEndretEvent
import no.nav.helse.mediator.UtgåendeMeldingerObserver
import no.nav.helse.rapids_rivers.JsonMessage
import org.slf4j.LoggerFactory
import java.util.UUID

Expand All @@ -15,7 +15,7 @@ internal class CommandContext(
) {
private val data = mutableListOf<Any>()
private val sti: MutableList<Int> = sti.toMutableList()
private var ferdigstilt = false
private var tidligFerdigstilt = false
private val observers = mutableSetOf<CommandContextObserver>()

internal fun nyObserver(observer: CommandContextObserver) {
Expand Down Expand Up @@ -44,11 +44,8 @@ internal class CommandContext(
observers.forEach { it.hendelse(melding) }
}

private fun publiserTilstandsendring(
nyTilstand: String,
melding: String,
) {
observers.forEach { it.tilstandEndret(nyTilstand, melding) }
private fun kommandokjedetilstandEndret(kommandokjedeEndretEvent: KommandokjedeEndretEvent) {
observers.forEach { it.tilstandEndret(kommandokjedeEndretEvent) }
}

internal fun add(data: Any) {
Expand Down Expand Up @@ -82,30 +79,13 @@ internal class CommandContext(
vedtaksperiodeId: UUID,
) {
val avbrutteKommandokjeder = commandContextRepository.avbryt(vedtaksperiodeId, id)
avbrutteKommandokjeder.forEach {
publiserAvbrutt(it.first, it.second)
avbrutteKommandokjeder.forEach { (contextId, hendelseId) ->
kommandokjedetilstandEndret(KommandokjedeEndretEvent.Avbrutt(contextId, hendelseId))
}
}

private fun publiserAvbrutt(
contextId: UUID,
meldingId: UUID,
) {
publiserTilstandsendring(
"AVBRUTT",
JsonMessage
.newMessage(
"kommandokjede_avbrutt",
mutableMapOf(
"commandContextId" to contextId,
"meldingId" to meldingId,
),
).toJson(),
)
}

private fun ferdigstill() {
ferdigstilt = true
tidligFerdigstilt = true
}

internal inline fun <reified T> get(): T? = data.filterIsInstance<T>().firstOrNull()
Expand All @@ -122,37 +102,14 @@ internal class CommandContext(
)
sti.clear()
}
return utfør(command).also {
if (ferdigstilt || it) {
return utfør(command).also { ferdig ->
if (tidligFerdigstilt || ferdig) {
commandContextDao.ferdig(hendelseId, id).also {
publiserTilstandsendring(
"FERDIGSTILT",
JsonMessage
.newMessage(
"kommandokjede_ferdigstilt",
mutableMapOf(
"commandContextId" to id,
"meldingId" to hendelseId,
"command" to command.name,
),
).toJson(),
)
kommandokjedetilstandEndret(KommandokjedeEndretEvent.Ferdig(command.name, id, hendelseId))
}
} else {
commandContextDao.suspendert(hendelseId, id, newHash, sti).also {
publiserTilstandsendring(
"SUSPENDERT",
JsonMessage
.newMessage(
"kommandokjede_suspendert",
mutableMapOf(
"commandContextId" to id,
"meldingId" to hendelseId,
"command" to command.name,
"sti" to sti,
),
).toJson(),
)
kommandokjedetilstandEndret(KommandokjedeEndretEvent.Suspendert(command.name, id, hendelseId))
}
}
}
Expand Down Expand Up @@ -181,7 +138,7 @@ internal class CommandContext(
commands: List<Command>,
runner: (command: Command) -> Boolean,
) = commands.all {
if (context.ferdigstilt) {
if (context.tidligFerdigstilt) {
true
} else {
runner(it)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import no.nav.helse.db.CommandContextRepository
import no.nav.helse.januar
import no.nav.helse.mediator.CommandContextObserver
import no.nav.helse.mediator.GodkjenningMediator
import no.nav.helse.mediator.KommandokjedeEndretEvent
import no.nav.helse.modell.kommando.CommandContext
import no.nav.helse.modell.person.vedtaksperiode.Varsel
import no.nav.helse.modell.person.vedtaksperiode.VarselStatusDto
Expand Down Expand Up @@ -170,14 +171,14 @@ internal class VurderAutomatiskInnvilgelseTest {
fun `Ferdigstiller kjede når perioden kan behandles automatisk`() {
every { automatisering.utfør(any(), any(), any(), any(), any(), any()) } returns Automatiseringsresultat.KanAutomatiseres
context.utfør(commandContextRepository, UUID.randomUUID(), command)
assertEquals("FERDIGSTILT", observatør.gjeldendeTilstand)
assertEquals("Ferdig", observatør.gjeldendeTilstand)
}

@Test
fun `Ferdigstiller kjede når perioden er spesialsak som kan behandles automatisk`() {
every { automatisering.utfør(any(), any(), any(), any(), any(), any()) } returns Automatiseringsresultat.KanAutomatiseres
context.utfør(commandContextRepository, UUID.randomUUID(), command)
assertEquals("FERDIGSTILT", observatør.gjeldendeTilstand)
assertEquals("Ferdig", observatør.gjeldendeTilstand)
}

private val commandContextRepository = object : CommandContextRepository {
Expand All @@ -201,8 +202,8 @@ internal class VurderAutomatiskInnvilgelseTest {
hendelser.add(hendelse)
}

override fun tilstandEndret(nyTilstand: String, hendelse: String) {
gjeldendeTilstand = nyTilstand
override fun tilstandEndret(hendelse: KommandokjedeEndretEvent) {
gjeldendeTilstand = hendelse::class.simpleName!!
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.mockk.mockk
import io.mockk.verify
import no.nav.helse.db.CommandContextRepository
import no.nav.helse.mediator.CommandContextObserver
import no.nav.helse.mediator.KommandokjedeEndretEvent
import no.nav.helse.modell.kommando.CommandContext.Companion.convertToUUID
import no.nav.helse.modell.kommando.CommandContext.Companion.ferdigstill
import org.junit.jupiter.api.Assertions.assertEquals
Expand All @@ -29,7 +30,7 @@ internal class CommandContextTest {
object : CommandContextObserver {
val behov = mutableMapOf<String, Map<String, Any>>()
val hendelser = mutableListOf<String>()
val utgåendeTilstandEndringer = mutableListOf<String>()
val utgåendeTilstandEndringer = mutableListOf<KommandokjedeEndretEvent>()

override fun behov(
behov: String,
Expand All @@ -43,7 +44,7 @@ internal class CommandContextTest {
this.hendelser.add(hendelse)
}

override fun tilstandEndret(nyTilstand: String, hendelse: String) {
override fun tilstandEndret(hendelse: KommandokjedeEndretEvent) {
this.utgåendeTilstandEndringer.add(hendelse)
}
}
Expand Down Expand Up @@ -117,7 +118,7 @@ internal class CommandContextTest {
}
val result = observer.utgåendeTilstandEndringer
assertTrue(result.isNotEmpty())
assertTrue(result.first().contains("kommandokjede_ferdigstilt"))
assertTrue(result.first() is KommandokjedeEndretEvent.Ferdig)
}

@Test
Expand All @@ -129,7 +130,7 @@ internal class CommandContextTest {
}
val result = observer.utgåendeTilstandEndringer
assertTrue(result.isNotEmpty())
assertTrue(result.first().contains("kommandokjede_suspendert"))
assertTrue(result.first() is KommandokjedeEndretEvent.Suspendert)
}

@Test
Expand All @@ -143,7 +144,7 @@ internal class CommandContextTest {
context.avbrytAlleForPeriode(commandContextRepository, UUID.randomUUID())
val result = observer.utgåendeTilstandEndringer
assertTrue(result.isNotEmpty())
assertTrue(result.last().contains("kommandokjede_avbrutt"))
assertTrue(result.last() is KommandokjedeEndretEvent.Avbrutt)
}

@Test
Expand Down

0 comments on commit 3933bdb

Please sign in to comment.