-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
IS-2685: Publish forhandsvarsel to esyfovarsel (#27)
- Loading branch information
1 parent
ed99c50
commit e4f290a
Showing
12 changed files
with
314 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13 changes: 13 additions & 0 deletions
13
src/main/kotlin/no/nav/syfo/application/IVarselProducer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package no.nav.syfo.application | ||
|
||
import no.nav.syfo.domain.JournalpostId | ||
import no.nav.syfo.domain.Personident | ||
import no.nav.syfo.domain.Varsel | ||
|
||
interface IVarselProducer { | ||
fun sendArbeidstakerForhandsvarsel( | ||
personIdent: Personident, | ||
journalpostId: JournalpostId, | ||
varsel: Varsel | ||
): Result<Varsel> | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/kotlin/no/nav/syfo/application/IVarselRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package no.nav.syfo.application | ||
|
||
import no.nav.syfo.domain.JournalpostId | ||
import no.nav.syfo.domain.Personident | ||
import no.nav.syfo.domain.Varsel | ||
import java.util.* | ||
|
||
interface IVarselRepository { | ||
fun getUnpublishedVarsler(): List<Triple<Personident, JournalpostId, Varsel>> | ||
fun updatePublishedAt(varselUuid: UUID) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package no.nav.syfo.application | ||
|
||
import no.nav.syfo.domain.Varsel | ||
|
||
class VarselService( | ||
private val varselRepository: IVarselRepository, | ||
private val varselProducer: IVarselProducer | ||
) { | ||
|
||
fun publishUnpublishedVarsler(): List<Result<Varsel>> { | ||
val unpublishedVarsler = varselRepository.getUnpublishedVarsler() | ||
|
||
return unpublishedVarsler.map { (personident, journalpostId, varsel) -> | ||
varselProducer.sendArbeidstakerForhandsvarsel( | ||
personIdent = personident, | ||
journalpostId = journalpostId, | ||
varsel = varsel, | ||
).map { | ||
varselRepository.updatePublishedAt(it.uuid) | ||
it | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
src/main/kotlin/no/nav/syfo/infrastructure/cronjob/PublishForhandsvarselCronjob.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package no.nav.syfo.infrastructure.cronjob | ||
|
||
import no.nav.syfo.application.VarselService | ||
|
||
class PublishForhandsvarselCronjob(private val varselService: VarselService) : Cronjob { | ||
override val initialDelayMinutes: Long = 4 | ||
override val intervalDelayMinutes: Long = 10 | ||
|
||
override suspend fun run() = varselService.publishUnpublishedVarsler() | ||
} |
64 changes: 64 additions & 0 deletions
64
src/main/kotlin/no/nav/syfo/infrastructure/database/repository/VarselRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package no.nav.syfo.infrastructure.database.repository | ||
|
||
import no.nav.syfo.application.IVarselRepository | ||
import no.nav.syfo.domain.JournalpostId | ||
import no.nav.syfo.domain.Personident | ||
import no.nav.syfo.domain.Varsel | ||
import no.nav.syfo.infrastructure.database.DatabaseInterface | ||
import no.nav.syfo.infrastructure.database.toList | ||
import no.nav.syfo.util.nowUTC | ||
import java.sql.ResultSet | ||
import java.sql.SQLException | ||
import java.time.OffsetDateTime | ||
import java.util.* | ||
|
||
class VarselRepository(private val database: DatabaseInterface) : IVarselRepository { | ||
|
||
override fun getUnpublishedVarsler(): List<Triple<Personident, JournalpostId, Varsel>> = database.connection.use { connection -> | ||
connection.prepareStatement(GET_UNPUBLISHED_VARSEL).use { | ||
it.executeQuery().toList { Triple(Personident(getString("personident")), JournalpostId(getString("journalpost_id")), toPVarsel()) } | ||
} | ||
}.map { (personident, journalpostId, pVarsel) -> Triple(personident, journalpostId, pVarsel.toVarsel()) } | ||
|
||
override fun updatePublishedAt(varselUuid: UUID) = | ||
database.connection.use { connection -> | ||
connection.prepareStatement(UPDATE_PUBLISHED_AT).use { | ||
it.setObject(1, nowUTC()) | ||
it.setObject(2, nowUTC()) | ||
it.setString(3, varselUuid.toString()) | ||
val updated = it.executeUpdate() | ||
if (updated != 1) { | ||
throw SQLException("Expected a single row to be updated, got update count $updated") | ||
} | ||
} | ||
connection.commit() | ||
} | ||
|
||
companion object { | ||
private const val GET_UNPUBLISHED_VARSEL = | ||
""" | ||
SELECT vu.personident, vu.journalpost_id, v.* FROM varsel v | ||
INNER JOIN vurdering vu | ||
ON v.vurdering_id = vu.id | ||
WHERE vu.journalpost_id IS NOT NULL AND v.published_at IS NULL | ||
""" | ||
|
||
private const val UPDATE_PUBLISHED_AT = | ||
""" | ||
UPDATE varsel | ||
SET published_at = ?, updated_at = ? | ||
WHERE uuid = ? | ||
""" | ||
} | ||
} | ||
|
||
internal fun ResultSet.toPVarsel(): PVarsel = | ||
PVarsel( | ||
id = getInt("id"), | ||
uuid = UUID.fromString(getString("uuid")), | ||
vurderingId = getInt("vurdering_id"), | ||
createdAt = getObject("created_at", OffsetDateTime::class.java), | ||
updatedAt = getObject("updated_at", OffsetDateTime::class.java), | ||
svarfrist = getDate("svarfrist").toLocalDate(), | ||
publishedAt = getObject("published_at", OffsetDateTime::class.java), | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
src/main/kotlin/no/nav/syfo/infrastructure/kafka/VarselProducer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package no.nav.syfo.infrastructure.kafka | ||
|
||
import no.nav.syfo.application.IVarselProducer | ||
import no.nav.syfo.domain.JournalpostId | ||
import no.nav.syfo.domain.Personident | ||
import no.nav.syfo.domain.Varsel | ||
import no.nav.syfo.infrastructure.kafka.esyfovarsel.EsyfovarselHendelseProducer | ||
|
||
class VarselProducer( | ||
private val arbeidstakerForhandsvarselProducer: EsyfovarselHendelseProducer, | ||
) : IVarselProducer { | ||
|
||
override fun sendArbeidstakerForhandsvarsel( | ||
personIdent: Personident, | ||
journalpostId: JournalpostId, | ||
varsel: Varsel | ||
): Result<Varsel> = | ||
arbeidstakerForhandsvarselProducer.sendArbeidstakerForhandsvarsel( | ||
personIdent = personIdent, | ||
journalpostId = journalpostId, | ||
varsel = varsel | ||
) | ||
} |
11 changes: 11 additions & 0 deletions
11
...main/kotlin/no/nav/syfo/infrastructure/kafka/esyfovarsel/EsyfoVarselHendelseSerializer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package no.nav.syfo.infrastructure.kafka.esyfovarsel | ||
|
||
import no.nav.syfo.infrastructure.kafka.esyfovarsel.dto.EsyfovarselHendelse | ||
import no.nav.syfo.util.configuredJacksonMapper | ||
import org.apache.kafka.common.serialization.Serializer | ||
|
||
class EsyfoVarselHendelseSerializer : Serializer<EsyfovarselHendelse> { | ||
private val mapper = configuredJacksonMapper() | ||
override fun serialize(topic: String?, data: EsyfovarselHendelse?): ByteArray = | ||
mapper.writeValueAsBytes(data) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.