Skip to content

Commit

Permalink
Merge pull request #6 from navikt/IS-2542-Notify-user-of-forhandsvarsel
Browse files Browse the repository at this point in the history
IS-2540: Notfiy user of forhandsvarsel
  • Loading branch information
vetlesolgaard authored Aug 6, 2024
2 parents 74bbc69 + 16a0557 commit 50ae3f9
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 5 deletions.
5 changes: 5 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ val logbackVersion = "1.5.6"
val logstashEncoderVersion = "7.4"
val micrometerRegistryVersion = "1.12.2"
val jacksonDatatypeVersion = "2.17.2"
val kafkaVersion = "3.7.0"
val ktorVersion = "2.3.12"
val spekVersion = "2.0.19"
val mockkVersion = "1.13.11"
Expand Down Expand Up @@ -55,6 +56,10 @@ dependencies {
implementation("org.flywaydb:flyway-database-postgresql:$flywayVersion")
testImplementation("io.zonky.test:embedded-postgres:$postgresEmbeddedVersion")

// Kafka
val excludeLog4j = fun ExternalModuleDependency.() { exclude(group = "log4j") }
implementation("org.apache.kafka:kafka_2.13:$kafkaVersion", excludeLog4j)

// (De-)serialization
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonDatatypeVersion")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package no.nav.syfo.infrastructure.kafka.esyfovarsel.dto

import com.fasterxml.jackson.annotation.JsonTypeInfo
import java.io.Serializable

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
sealed interface EsyfovarselHendelse : Serializable {
val type: HendelseType
var data: Any?
}

data class ArbeidstakerHendelse(
override val type: HendelseType,
override var data: Any?,
val arbeidstakerFnr: String,
val orgnummer: String?,
) : EsyfovarselHendelse

data class VarselData(
val journalpost: VarselDataJournalpost? = null,
)

data class VarselDataJournalpost(
val uuid: String,
val id: String?,
)

enum class HendelseType {
SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package no.nav.syfo.infrastructure.kafka.esyfovarsel

import no.nav.syfo.domain.ManglendeMedvirkningVurdering
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.ArbeidstakerHendelse
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.EsyfovarselHendelse
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.HendelseType
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.VarselData
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.VarselDataJournalpost
import org.apache.kafka.clients.producer.KafkaProducer
import org.apache.kafka.clients.producer.ProducerRecord
import org.slf4j.LoggerFactory
import java.util.*

class EsyfovarselHendelseProducer(
private val producer: KafkaProducer<String, EsyfovarselHendelse>,
) {

fun sendVurderingVarsel(vurdering: ManglendeMedvirkningVurdering): Result<ManglendeMedvirkningVurdering> {
if (vurdering.journalpostId == null)
throw IllegalStateException("JournalpostId is null for vurdering ${vurdering.uuid}")

val varselHendelse = ArbeidstakerHendelse(
type = HendelseType.SM_FORHANDSVARSEL_MANGLENDE_MEDVIRKNING,
arbeidstakerFnr = vurdering.personident.value,
data = VarselData(
journalpost = VarselDataJournalpost(
uuid = vurdering.uuid.toString(),
id = vurdering.journalpostId!!.value,
),
),
orgnummer = null,
)

return try {
producer.send(
ProducerRecord(
ESYFOVARSEL_TOPIC,
UUID.nameUUIDFromBytes(vurdering.personident.value.toByteArray()).toString(),
varselHendelse,
)
).get()
Result.success(vurdering)
} catch (e: Exception) {
log.error("Exception was thrown when attempting to send hendelse varsel (uuid: ${vurdering.uuid}) to esyfovarsel: ${e.message}")
Result.failure(e)
}
}

companion object {
private const val ESYFOVARSEL_TOPIC = "team-esyfo.varselbus"
private val log = LoggerFactory.getLogger(EsyfovarselHendelseProducer::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe
import java.util.UUID

class ManglendeMedvirkningRepositorySpek : Spek({
class VurderingRepositorySpek : Spek({

describe(ManglendeMedvirkningRepositorySpek::class.java.simpleName) {
describe(VurderingRepositorySpek::class.java.simpleName) {
with(TestApplicationEngine()) {
start()
val externalMockEnvironment = ExternalMockEnvironment.instance
val database = externalMockEnvironment.database
val manglendeMedvirkningRepository = VurderingRepository(database = database)
val vurderingRepository = VurderingRepository(database = database)
val pdf = byteArrayOf(0x2E, 100)

afterEachTest { database.dropData() }
Expand All @@ -36,7 +36,7 @@ class ManglendeMedvirkningRepositorySpek : Spek({
document = emptyList(),
journalpostId = null,
)
val savedVurdering = manglendeMedvirkningRepository.saveManglendeMedvirkningVurdering(vurdering, pdf)
val savedVurdering = vurderingRepository.saveManglendeMedvirkningVurdering(vurdering, pdf)
savedVurdering!!.personident shouldBeEqualTo vurdering.personident
savedVurdering.veilederident shouldBeEqualTo vurdering.veilederident
savedVurdering.begrunnelse shouldBeEqualTo vurdering.begrunnelse
Expand All @@ -60,7 +60,7 @@ class ManglendeMedvirkningRepositorySpek : Spek({
now.toLocalDate(),
),
)
val savedVurdering = manglendeMedvirkningRepository.saveManglendeMedvirkningVurdering(vurdering, pdf)
val savedVurdering = vurderingRepository.saveManglendeMedvirkningVurdering(vurdering, pdf)
when (savedVurdering) {
is ManglendeMedvirkningVurdering.Forhandsvarsel -> {
savedVurdering.personident shouldBeEqualTo vurdering.personident
Expand Down

0 comments on commit 50ae3f9

Please sign in to comment.