Skip to content

Commit

Permalink
EY-4871 endring i domene trekkplikt bp og options for uthenting av jo…
Browse files Browse the repository at this point in the history
…bber (#6606)

* EY-4871 rename tabell og legge til DAO funksjonalitet

* EY-4871 rette tester
  • Loading branch information
andreasbalevik authored Dec 12, 2024
1 parent ceab51a commit 7cbbd11
Show file tree
Hide file tree
Showing 9 changed files with 186 additions and 108 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import java.util.UUID

data class Arbeidsjobb(
data class Brevutsendelse(
val id: UUID,
val sakId: SakId,
val type: JobbType,
Expand All @@ -14,15 +14,15 @@ data class Arbeidsjobb(
val opprettet: Tidspunkt,
val sistEndret: Tidspunkt,
) {
fun oppdaterStatus(status: ArbeidStatus): Arbeidsjobb = this.copy(status = status)
fun oppdaterStatus(status: ArbeidStatus): Brevutsendelse = this.copy(status = status)
}

fun lagNyArbeidsJobb(
fun opprettNyBrevutsendelse(
sakId: SakId,
type: JobbType,
merknad: String?,
): Arbeidsjobb =
Arbeidsjobb(
): Brevutsendelse =
Brevutsendelse(
id = UUID.randomUUID(),
sakId = sakId,
type = type,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ import org.slf4j.LoggerFactory
import java.sql.ResultSet
import java.util.UUID

class ArbeidstabellDao(
class BrevutsendelseDao(
private val connectionAutoclosing: ConnectionAutoclosing,
) {
private val logger = LoggerFactory.getLogger(this::class.java)

fun opprettJobb(jobb: Arbeidsjobb): Arbeidsjobb {
fun opprettJobb(jobb: Brevutsendelse): Brevutsendelse {
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
INSERT INTO arbeidstabell(id, sak_id, status, merknad, resultat, opprettet, endret, jobbtype)
INSERT INTO brevutsendelse(id, sak_id, status, merknad, resultat, opprettet, endret, jobbtype)
VALUES(?::UUID, ?, ?, ?, ?, ?, ?, ?)
""".trimIndent(),
)
Expand All @@ -34,20 +34,20 @@ class ArbeidstabellDao(
statement.setTidspunkt(7, jobb.sistEndret)
statement.setString(8, jobb.type.name)
statement.executeUpdate()
logger.info("Opprettet en jobb av type ${jobb.type.name} for sak ${jobb.sakId} med status ${jobb.status}")
logger.info("Opprettet jobb av type ${jobb.type.name} for sak ${jobb.sakId} med status ${jobb.status}")
}
}

return hentJobb(jobb.id) ?: throw IllegalStateException("Fant ikke jobb $jobb")
}

fun oppdaterJobb(jobb: Arbeidsjobb): Arbeidsjobb {
fun oppdaterJobb(jobb: Brevutsendelse): Brevutsendelse {
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
UPDATE arbeidstabell SET status = ? WHERE id = ?
UPDATE brevutsendelse SET status = ? WHERE id = ?
""".trimIndent(),
)
statement.setString(1, jobb.status.name)
Expand All @@ -58,13 +58,13 @@ class ArbeidstabellDao(
return hentJobb(jobb.id) ?: throw IllegalStateException("Fant ikke jobb $jobb")
}

fun hentJobb(id: UUID): Arbeidsjobb? =
fun hentJobb(id: UUID): Brevutsendelse? =
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
SELECT * from arbeidstabell where id = ?
SELECT * from brevutsendelse where id = ?
""".trimIndent(),
)
statement.setObject(1, id)
Expand All @@ -74,28 +74,46 @@ class ArbeidstabellDao(
}
}

fun hentKlareJobber(
antallSaker: Long,
ekskluderteSaker: List<Long> = emptyList(),
): List<Arbeidsjobb> =
// TODO håndter antall saker og ekskluderte saker
fun hentNyeJobber(
antall: Int,
spesifikkeSaker: List<SakId> = emptyList(),
ekskluderteSaker: List<SakId> = emptyList(),
): List<Brevutsendelse> =
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
SELECT * from arbeidstabell where status = ?
SELECT * FROM brevutsendelse
WHERE status = ?
${if (spesifikkeSaker.isEmpty()) "" else " AND sak_id = ANY(?)"}
${if (ekskluderteSaker.isEmpty()) "" else " AND NOT(sak_id = ANY(?))"}
ORDER BY sak_id ASC
LIMIT $antall
""".trimIndent(),
)
statement.setString(1, ArbeidStatus.NY.name)

var paramIndex = 1
statement.setString(paramIndex, ArbeidStatus.NY.name)
paramIndex += 1

if (spesifikkeSaker.isNotEmpty()) {
statement.setArray(paramIndex, createArrayOf("bigint", spesifikkeSaker.toTypedArray()))
paramIndex += 1
}
if (ekskluderteSaker.isNotEmpty()) {
statement.setArray(paramIndex, createArrayOf("bigint", ekskluderteSaker.toTypedArray()))
paramIndex += 1
}

statement.executeQuery().toList {
asJobb()
}
}
}

private fun ResultSet.asJobb() =
Arbeidsjobb(
Brevutsendelse(
id = getObject("id") as UUID,
sakId = SakId(getLong("sak_id")),
type = JobbType.valueOf(getString("jobbtype")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.FEILET
import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.FERDIG
import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.PAAGAAENDE
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.libs.ktor.token.HardkodaSystembruker
import org.slf4j.LoggerFactory

class BrevutsendelseJob(
private val arbeidstabellDao: ArbeidstabellDao,
class BrevutsendelseJobb(
private val brevutsendelseDao: BrevutsendelseDao,
private val brevutsendelseService: BrevutsendelseService,
) {
private val saksbehandler: BrukerTokenInfo = HardkodaSystembruker.oppgave
Expand All @@ -28,7 +29,7 @@ class BrevutsendelseJob(
private fun run() {
logger.info("Starter jobb for masseutsendelse av brev")

val brevutsendelser = inTransaction { arbeidstabellDao.hentKlareJobber(ANTALL_SAKER, EKSKLUDERTE_SAKER) }
val brevutsendelser = inTransaction { brevutsendelseDao.hentNyeJobber(ANTALL_SAKER, SPESIFIKKE_SAKER, EKSKLUDERTE_SAKER) }
logger.info("Hentet ${brevutsendelser.size} brevutsendelser som er klare for prosessering")

brevutsendelser.forEach { brevutsendelse ->
Expand All @@ -48,13 +49,14 @@ class BrevutsendelseJob(

// TODO oppdater status eller opprett ny rad for hver status?
private fun oppdaterStatus(
jobb: Arbeidsjobb,
jobb: Brevutsendelse,
status: ArbeidStatus,
) = arbeidstabellDao.oppdaterJobb(jobb.oppdaterStatus(status))
) = brevutsendelseDao.oppdaterJobb(jobb.oppdaterStatus(status))

// TODO burde dette heller håndteres fra en tabell slik at det kan oppdateres uten å endre koden?
companion object {
val ANTALL_SAKER: Long = 1
val EKSKLUDERTE_SAKER: List<Long> = emptyList()
val ANTALL_SAKER: Int = 1
val EKSKLUDERTE_SAKER: List<SakId> = emptyList()
val SPESIFIKKE_SAKER: List<SakId> = emptyList()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class BrevutsendelseService(
private val logger = LoggerFactory.getLogger(this::class.java)

fun prosesserBrevutsendelse(
brevutsendelse: Arbeidsjobb,
brevutsendelse: Brevutsendelse,
brukerTokenInfo: BrukerTokenInfo,
) {
withLogContext(kv = mdcVerdier(brevutsendelse)) {
Expand All @@ -55,21 +55,21 @@ class BrevutsendelseService(
}
}

private fun mdcVerdier(brevutsendelse: Arbeidsjobb) =
private fun mdcVerdier(brevutsendelse: Brevutsendelse) =
mapOf(
"sakId" to brevutsendelse.sakId.toString(),
"jobbType" to brevutsendelse.type.name,
)

private fun hentSak(brevutsendelse: Arbeidsjobb) =
private fun hentSak(brevutsendelse: Brevutsendelse) =
(
sakService.finnSak(brevutsendelse.sakId)
?: throw InternfeilException("Fant ikke sak med id ${brevutsendelse.sakId} for brevutsendelse")
)

private fun sendBrev(
sak: Sak,
brevutsendelse: Arbeidsjobb,
brevutsendelse: Brevutsendelse,
saksbehandler: BrukerTokenInfo,
): BrevStatusResponse {
logger.info("Sender brev til ${sak.ident.maskerFnr()} i sak ${sak.id}")
Expand All @@ -92,7 +92,7 @@ class BrevutsendelseService(

private fun ferdigStillJournalFoerOgDistribuerOpprettetBrev(
opprettetBrev: Brev,
brevutsendelse: Arbeidsjobb,
brevutsendelse: Brevutsendelse,
sak: Sak,
saksbehandler: BrukerTokenInfo,
): BrevStatusResponse =
Expand All @@ -108,7 +108,7 @@ class BrevutsendelseService(
)
}

private fun opprettManuellOppgave(brevutsendelse: Arbeidsjobb): OppgaveIntern =
private fun opprettManuellOppgave(brevutsendelse: Brevutsendelse): OppgaveIntern =
oppgaveService.opprettOppgave(
referanse = brevutsendelse.id.toString(),
sakId = brevutsendelse.sakId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE arbeidstabell RENAME TO brevutsendelse

This file was deleted.

Loading

0 comments on commit 7cbbd11

Please sign in to comment.