Skip to content

Commit

Permalink
Bruk service med steg i LagreSelvbestemtImService (#605)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga authored Jul 16, 2024
1 parent 3dc9e10 commit ccdb42e
Show file tree
Hide file tree
Showing 10 changed files with 406 additions and 398 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,19 @@ class LagreSelvbestemtImProducer(
}

fun publish(
clientId: UUID,
transaksjonId: UUID,
skjema: SkjemaInntektsmeldingSelvbestemt,
avsenderFnr: Fnr,
) {
MdcUtils.withLogFields(
Log.event(EventName.SELVBESTEMT_IM_MOTTATT),
Log.clientId(clientId),
Log.transaksjonId(transaksjonId),
) {
rapid
.publish(
Key.EVENT_NAME to EventName.SELVBESTEMT_IM_MOTTATT.toJson(),
Key.CLIENT_ID to clientId.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.DATA to "".toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
).also {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ fun Route.lagreSelvbestemtImRoute(
val producer = LagreSelvbestemtImProducer(rapid)

post(Routes.SELVBESTEMT_INNTEKTSMELDING) {
val clientId = UUID.randomUUID()
val transaksjonId = UUID.randomUUID()

MdcUtils.withLogFields(
Log.apiRoute(Routes.SELVBESTEMT_INNTEKTSMELDING),
Log.clientId(clientId),
Log.transaksjonId(transaksjonId),
) {
val skjema = lesRequestOrNull()
when {
Expand All @@ -83,11 +83,11 @@ fun Route.lagreSelvbestemtImRoute(

val avsenderFnr = call.request.lesFnrFraAuthToken()

producer.publish(clientId, skjema, avsenderFnr)
producer.publish(transaksjonId, skjema, avsenderFnr)

val resultat =
runCatching {
redisPoller.hent(clientId)
redisPoller.hent(transaksjonId)
}

sendResponse(resultat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,18 @@ class LagreSelvbestemtImProducerTest :
val producer = LagreSelvbestemtImProducer(testRapid)

test("publiserer melding på forventet format") {
val clientId = UUID.randomUUID()
val transaksjonId = UUID.randomUUID()
val avsenderFnr = Fnr.genererGyldig()
val skjema = mockSkjemaInntektsmeldingSelvbestemt()

producer.publish(clientId, skjema, avsenderFnr)
producer.publish(transaksjonId, skjema, avsenderFnr)

testRapid.inspektør.size shouldBeExactly 1
testRapid.firstMessage().toMap() shouldContainExactly
mapOf(
Key.EVENT_NAME to EventName.SELVBESTEMT_IM_MOTTATT.toJson(),
Key.CLIENT_ID to clientId.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.DATA to "".toJson(),
Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmeldingSelvbestemt.serializer()),
Key.ARBEIDSGIVER_FNR to avsenderFnr.toJson(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ import java.util.UUID

private const val AVSENDER_NAV_NO = "NAV_NO"

class Steg0(
data class Steg0(
val transaksjonId: UUID,
val forespoerselId: UUID,
val spinnImId: UUID,
)

class Steg1(
data class Steg1(
val eksternInntektsmelding: EksternInntektsmelding,
)

Expand Down Expand Up @@ -64,54 +64,50 @@ class SpinnService(
)

override fun utfoerSteg0(steg0: Steg0) {
withLogFields(steg0) {
val publisert =
rapid.publish(
Key.EVENT_NAME to eventName.toJson(),
Key.BEHOV to BehovType.HENT_EKSTERN_INNTEKTSMELDING.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.DATA to
mapOf(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.SPINN_INNTEKTSMELDING_ID to steg0.spinnImId.toJson(),
).toJson(),
)
val publisert =
rapid.publish(
Key.EVENT_NAME to eventName.toJson(),
Key.BEHOV to BehovType.HENT_EKSTERN_INNTEKTSMELDING.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.DATA to
mapOf(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.SPINN_INNTEKTSMELDING_ID to steg0.spinnImId.toJson(),
).toJson(),
)

MdcUtils.withLogFields(
Log.behov(BehovType.HENT_EKSTERN_INNTEKTSMELDING),
) {
logger.info("Publiserte melding om ${BehovType.HENT_EKSTERN_INNTEKTSMELDING}.")
sikkerLogger.info("Publiserte melding:\n${publisert.toPretty()}.")
}
MdcUtils.withLogFields(
Log.behov(BehovType.HENT_EKSTERN_INNTEKTSMELDING),
) {
logger.info("Publiserte melding om ${BehovType.HENT_EKSTERN_INNTEKTSMELDING}.")
sikkerLogger.info("Publiserte melding:\n${publisert.toPretty()}.")
}
}

override fun utfoerSteg1(
steg0: Steg0,
steg1: Steg1,
) {
withLogFields(steg0) {
if (steg1.eksternInntektsmelding.avsenderSystemNavn != AVSENDER_NAV_NO) {
val publisert =
rapid.publish(
Key.EVENT_NAME to EventName.EKSTERN_INNTEKTSMELDING_MOTTATT.toJson(),
Key.BEHOV to BehovType.LAGRE_EKSTERN_INNTEKTSMELDING.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.EKSTERN_INNTEKTSMELDING to steg1.eksternInntektsmelding.toJson(EksternInntektsmelding.serializer()),
)
if (steg1.eksternInntektsmelding.avsenderSystemNavn != AVSENDER_NAV_NO) {
val publisert =
rapid.publish(
Key.EVENT_NAME to EventName.EKSTERN_INNTEKTSMELDING_MOTTATT.toJson(),
Key.BEHOV to BehovType.LAGRE_EKSTERN_INNTEKTSMELDING.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.EKSTERN_INNTEKTSMELDING to steg1.eksternInntektsmelding.toJson(EksternInntektsmelding.serializer()),
)

MdcUtils.withLogFields(
Log.event(EventName.EKSTERN_INNTEKTSMELDING_MOTTATT),
Log.behov(BehovType.LAGRE_EKSTERN_INNTEKTSMELDING),
) {
logger.info("Publiserte melding om ${BehovType.LAGRE_EKSTERN_INNTEKTSMELDING}.")
sikkerLogger.info("Publiserte melding:\n${publisert.toPretty()}")
}
MdcUtils.withLogFields(
Log.event(EventName.EKSTERN_INNTEKTSMELDING_MOTTATT),
Log.behov(BehovType.LAGRE_EKSTERN_INNTEKTSMELDING),
) {
logger.info("Publiserte melding om ${BehovType.LAGRE_EKSTERN_INNTEKTSMELDING}.")
sikkerLogger.info("Publiserte melding:\n${publisert.toPretty()}")
}

sikkerLogger.info("$eventName fullført.")
}

sikkerLogger.info("$eventName fullført.")
}

override fun onError(
Expand All @@ -127,17 +123,11 @@ class SpinnService(
}
}

private fun withLogFields(
steg0: Steg0,
block: () -> Unit,
) {
MdcUtils.withLogFields(
Log.klasse(this),
override fun Steg0.loggfelt(): Map<String, String> =
mapOf(
Log.klasse(this@SpinnService),
Log.event(eventName),
Log.transaksjonId(steg0.transaksjonId),
Log.forespoerselId(steg0.forespoerselId),
) {
block()
}
}
Log.transaksjonId(transaksjonId),
Log.forespoerselId(forespoerselId),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStoreClassSpecific
import no.nav.helsearbeidsgiver.utils.log.MdcUtils
import org.slf4j.Logger

// TODO kan bli sealed når alle servicer bruker steg-abstraksjon
Expand All @@ -29,28 +30,32 @@ abstract class Service {

// TODO lese påkrevde felt som transaksjonId her?
abstract class ServiceMed1Steg<S0, S1> : Service() {
abstract val logger: Logger
abstract val sikkerLogger: Logger
protected abstract val logger: Logger
protected abstract val sikkerLogger: Logger

abstract fun lesSteg0(melding: Map<Key, JsonElement>): S0
protected abstract fun lesSteg0(melding: Map<Key, JsonElement>): S0

abstract fun lesSteg1(melding: Map<Key, JsonElement>): S1
protected abstract fun lesSteg1(melding: Map<Key, JsonElement>): S1

abstract fun utfoerSteg0(steg0: S0)
protected abstract fun utfoerSteg0(steg0: S0)

abstract fun utfoerSteg1(
protected abstract fun utfoerSteg1(
steg0: S0,
steg1: S1,
)

protected abstract fun S0.loggfelt(): Map<String, String>

override fun onData(melding: Map<Key, JsonElement>) {
runCatching {
Pair(
first = lesSteg0(melding),
second = lesSteg1(melding),
)
}.onSuccess {
utfoerSteg1(it.first, it.second)
medLoggfelt(it.first) {
utfoerSteg1(it.first, it.second)
}
}.onFailure {
lesOgUtfoerSteg0(melding)
}
Expand All @@ -59,20 +64,33 @@ abstract class ServiceMed1Steg<S0, S1> : Service() {
private fun lesOgUtfoerSteg0(melding: Map<Key, JsonElement>) {
runCatching { lesSteg0(melding) }
.onSuccess {
utfoerSteg0(it)
medLoggfelt(it) {
utfoerSteg0(it)
}
}.onFailure {
"Klarte ikke lese startdata for service.".also {
logger.error(it)
sikkerLogger.error(it)
}
}
}

internal fun medLoggfelt(
steg0: S0,
block: () -> Unit,
) {
MdcUtils.withLogFields(
*steg0.loggfelt().toList().toTypedArray(),
) {
block()
}
}
}

abstract class ServiceMed2Steg<S0, S1, S2> : ServiceMed1Steg<S0, S1>() {
abstract fun lesSteg2(melding: Map<Key, JsonElement>): S2
protected abstract fun lesSteg2(melding: Map<Key, JsonElement>): S2

abstract fun utfoerSteg2(
protected abstract fun utfoerSteg2(
steg0: S0,
steg1: S1,
steg2: S2,
Expand All @@ -86,17 +104,19 @@ abstract class ServiceMed2Steg<S0, S1, S2> : ServiceMed1Steg<S0, S1>() {
third = lesSteg2(melding),
)
}.onSuccess {
utfoerSteg2(it.first, it.second, it.third)
medLoggfelt(it.first) {
utfoerSteg2(it.first, it.second, it.third)
}
}.onFailure {
super.onData(melding)
}
}
}

abstract class ServiceMed3Steg<S0, S1, S2, S3> : ServiceMed2Steg<S0, S1, S2>() {
abstract fun lesSteg3(melding: Map<Key, JsonElement>): S3
protected abstract fun lesSteg3(melding: Map<Key, JsonElement>): S3

abstract fun utfoerSteg3(
protected abstract fun utfoerSteg3(
steg0: S0,
steg1: S1,
steg2: S2,
Expand All @@ -112,7 +132,9 @@ abstract class ServiceMed3Steg<S0, S1, S2, S3> : ServiceMed2Steg<S0, S1, S2>() {
fourth = lesSteg3(melding),
)
}.onSuccess {
utfoerSteg3(it.first, it.second, it.third, it.fourth)
medLoggfelt(it.first) {
utfoerSteg3(it.first, it.second, it.third, it.fourth)
}
}.onFailure {
super.onData(melding)
}
Expand Down
Loading

0 comments on commit ccdb42e

Please sign in to comment.