Skip to content

Commit

Permalink
♻️ UtbetalingEndret kjøres transaksjonelt
Browse files Browse the repository at this point in the history
Co-authored-by: Christian Skovborg Gule<[email protected]>
  • Loading branch information
oydisrefsum committed Oct 21, 2024
1 parent f0bed57 commit 4363d60
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,15 @@ class TransactionalUtbetalingDao(private val session: Session) : UtbetalingRepos
)
}

override fun finnUtbetalingIdRef(utbetalingId: UUID): Long = throw UnsupportedOperationException()
override fun finnUtbetalingIdRef(utbetalingId: UUID): Long? {
@Language("PostgreSQL")
val statement = "SELECT id FROM utbetaling_id WHERE utbetaling_id = ? LIMIT 1;"
return session.run(
queryOf(statement, utbetalingId).map { row ->
row.long("id")
}.asSingle,
)
}

override fun hentUtbetaling(utbetalingId: UUID): Utbetaling =
checkNotNull(utbetalingFor(utbetalingId)) { "Finner ikke utbetaling, utbetalingId=$utbetalingId" }
Expand All @@ -55,13 +63,44 @@ class TransactionalUtbetalingDao(private val session: Session) : UtbetalingRepos
opprettet: LocalDateTime,
json: String,
) {
throw UnsupportedOperationException()
@Language("PostgreSQL")
val statement = """
INSERT INTO utbetaling ( utbetaling_id_ref, status, opprettet, data )
VALUES (:utbetalingIdRef, CAST(:status as utbetaling_status), :opprettet, CAST(:json as json)) ON CONFLICT (status, opprettet, utbetaling_id_ref) DO NOTHING;
"""
session.run(
queryOf(
statement,
mapOf(
"utbetalingIdRef" to utbetalingIdRef,
"status" to status.toString(),
"opprettet" to opprettet,
"json" to json,
),
).asExecute,
)
}

override fun nyttOppdrag(
fagsystemId: String,
mottaker: String,
): Long = throw UnsupportedOperationException()
): Long? {
@Language("PostgreSQL")
val statement = """
INSERT INTO oppdrag (fagsystem_id, mottaker)
VALUES (:fagsystemId, :mottaker)
ON CONFLICT DO NOTHING
"""
return session.run(
queryOf(
statement,
mapOf(
"fagsystemId" to fagsystemId,
"mottaker" to mottaker,
),
).asUpdateAndReturnGeneratedKey,
)
}

override fun opprettUtbetalingId(
utbetalingId: UUID,
Expand All @@ -73,7 +112,43 @@ class TransactionalUtbetalingDao(private val session: Session) : UtbetalingRepos
personFagsystemIdRef: Long,
arbeidsgiverbeløp: Int,
personbeløp: Int,
): Long = throw UnsupportedOperationException()
): Long {
@Language("PostgreSQL")
val statement = """
INSERT INTO utbetaling_id (
utbetaling_id, person_ref, arbeidsgiver_ref, type, opprettet, arbeidsgiver_fagsystem_id_ref, person_fagsystem_id_ref, arbeidsgiverbeløp, personbeløp
) VALUES (
:utbetalingId,
(SELECT id FROM person WHERE fodselsnummer = :fodselsnummer),
(SELECT id FROM arbeidsgiver WHERE orgnummer = :orgnummer),
CAST(:type as utbetaling_type),
:opprettet,
:arbeidsgiverFagsystemIdRef,
:personFagsystemIdRef,
:arbeidsgiverbelop,
:personbelop
)
ON CONFLICT (utbetaling_id) DO NOTHING RETURNING id
"""
return requireNotNull(
session.run(
queryOf(
statement,
mapOf(
"utbetalingId" to utbetalingId,
"fodselsnummer" to fødselsnummer.toLong(),
"orgnummer" to orgnummer.toLong(),
"type" to type.toString(),
"opprettet" to opprettet,
"arbeidsgiverFagsystemIdRef" to arbeidsgiverFagsystemIdRef,
"personFagsystemIdRef" to personFagsystemIdRef,
"arbeidsgiverbelop" to arbeidsgiverbeløp,
"personbelop" to personbeløp,
),
).asUpdateAndReturnGeneratedKey,
),
) { "Kunne ikke opprette utbetaling" }
}

override fun opprettKobling(
vedtaksperiodeId: UUID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import no.nav.helse.db.CommandContextRepository
import no.nav.helse.db.InntektskilderDao
import no.nav.helse.db.NotatDao
import no.nav.helse.db.OppgaveRepository
import no.nav.helse.db.OpptegnelseDao
import no.nav.helse.db.Periodehistorikk
import no.nav.helse.db.ReservasjonDao
import no.nav.helse.db.TildelingDao
Expand Down Expand Up @@ -114,7 +113,6 @@ internal class Kommandofabrikk(
private val automatisering: Automatisering,
private val arbeidsforholdDao: ArbeidsforholdDao = ArbeidsforholdDao(dataSource),
private val utbetalingDao: UtbetalingDao = UtbetalingDao(dataSource),
private val opptegnelseDao: OpptegnelseDao = OpptegnelseDao(dataSource),
private val generasjonService: GenerasjonService = GenerasjonService(dataSource),
private val vergemålDao: VergemålDao = VergemålDao(dataSource),
) {
Expand Down Expand Up @@ -315,7 +313,10 @@ internal class Kommandofabrikk(
overstyringRepository = TransactionalOverstyringDao(transactionalSession),
)

internal fun utbetalingEndret(hendelse: UtbetalingEndret): UtbetalingEndretCommand =
internal fun utbetalingEndret(
hendelse: UtbetalingEndret,
session: TransactionalSession,
): UtbetalingEndretCommand =
UtbetalingEndretCommand(
fødselsnummer = hendelse.fødselsnummer(),
organisasjonsnummer = hendelse.organisasjonsnummer,
Expand All @@ -327,13 +328,19 @@ internal class Kommandofabrikk(
personOppdrag = hendelse.personOppdrag,
arbeidsgiverbeløp = hendelse.arbeidsgiverbeløp,
personbeløp = hendelse.personbeløp,
utbetalingRepository = utbetalingDao,
opptegnelseRepository = opptegnelseDao,
reservasjonRepository = reservasjonDao,
oppgaveRepository = oppgaveDao,
tildelingRepository = tildelingDao,
oppgaveService = oppgaveService,
totrinnsvurderingMediator = totrinnsvurderingMediator,
utbetalingRepository = TransactionalUtbetalingDao(session),
opptegnelseRepository = TransactionalOpptegnelseDao(session),
reservasjonRepository = TransactionalReservasjonDao(session),
oppgaveRepository = TransactionalOppgaveDao(session),
tildelingRepository = TransactionalTildelingDao(session),
oppgaveService = transaksjonellOppgaveService(session),
totrinnsvurderingMediator =
TotrinnsvurderingMediator(
TransactionalTotrinnsvurderingDao(session),
TransactionalOppgaveDao(session),
TransactionalPeriodehistorikkDao(session),
TransactionalNotatDao(session),
),
json = hendelse.toJson(),
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,8 @@ class UtbetalingDao(private val dataSource: DataSource) : HelseDao(dataSource),
}

override fun finnUtbetalingIdRef(utbetalingId: UUID): Long? {
@Language("PostgreSQL")
val statement = "SELECT id FROM utbetaling_id WHERE utbetaling_id = ? LIMIT 1;"
return sessionOf(dataSource).use {
it.run(
queryOf(statement, utbetalingId).map { row ->
row.long("id")
}.asSingle,
)
sessionOf(dataSource).use { session ->
return TransactionalUtbetalingDao(session).finnUtbetalingIdRef(utbetalingId)
}
}

Expand All @@ -42,23 +36,8 @@ class UtbetalingDao(private val dataSource: DataSource) : HelseDao(dataSource),
opprettet: LocalDateTime,
json: String,
) {
@Language("PostgreSQL")
val statement = """
INSERT INTO utbetaling ( utbetaling_id_ref, status, opprettet, data )
VALUES (:utbetalingIdRef, CAST(:status as utbetaling_status), :opprettet, CAST(:json as json)) ON CONFLICT (status, opprettet, utbetaling_id_ref) DO NOTHING;
"""
sessionOf(dataSource).use {
it.run(
queryOf(
statement,
mapOf(
"utbetalingIdRef" to utbetalingIdRef,
"status" to status.toString(),
"opprettet" to opprettet,
"json" to json,
),
).asExecute,
)
sessionOf(dataSource).use { session ->
TransactionalUtbetalingDao(session).nyUtbetalingStatus(utbetalingIdRef, status, opprettet, json)
}
}

Expand Down Expand Up @@ -90,65 +69,19 @@ class UtbetalingDao(private val dataSource: DataSource) : HelseDao(dataSource),
arbeidsgiverbeløp: Int,
personbeløp: Int,
): Long {
@Language("PostgreSQL")
val statement = """
INSERT INTO utbetaling_id (
utbetaling_id, person_ref, arbeidsgiver_ref, type, opprettet, arbeidsgiver_fagsystem_id_ref, person_fagsystem_id_ref, arbeidsgiverbeløp, personbeløp
) VALUES (
:utbetalingId,
(SELECT id FROM person WHERE fodselsnummer = :fodselsnummer),
(SELECT id FROM arbeidsgiver WHERE orgnummer = :orgnummer),
CAST(:type as utbetaling_type),
:opprettet,
:arbeidsgiverFagsystemIdRef,
:personFagsystemIdRef,
:arbeidsgiverbelop,
:personbelop
)
ON CONFLICT (utbetaling_id) DO NOTHING RETURNING id
"""
return sessionOf(dataSource, returnGeneratedKey = true).use {
requireNotNull(
it.run(
queryOf(
statement,
mapOf(
"utbetalingId" to utbetalingId,
"fodselsnummer" to fødselsnummer.toLong(),
"orgnummer" to orgnummer.toLong(),
"type" to type.toString(),
"opprettet" to opprettet,
"arbeidsgiverFagsystemIdRef" to arbeidsgiverFagsystemIdRef,
"personFagsystemIdRef" to personFagsystemIdRef,
"arbeidsgiverbelop" to arbeidsgiverbeløp,
"personbelop" to personbeløp,
),
).asUpdateAndReturnGeneratedKey,
),
) { "Kunne ikke opprette utbetaling" }
sessionOf(dataSource, returnGeneratedKey = true).use { session ->
return TransactionalUtbetalingDao(
session,
).opprettUtbetalingId(utbetalingId, fødselsnummer, orgnummer, type, opprettet, arbeidsgiverFagsystemIdRef, personFagsystemIdRef, arbeidsgiverbeløp, personbeløp)
}
}

override fun nyttOppdrag(
fagsystemId: String,
mottaker: String,
): Long? {
@Language("PostgreSQL")
val statement = """
INSERT INTO oppdrag (fagsystem_id, mottaker)
VALUES (:fagsystemId, :mottaker)
ON CONFLICT DO NOTHING
"""
return sessionOf(dataSource, returnGeneratedKey = true).use {
it.run(
queryOf(
statement,
mapOf(
"fagsystemId" to fagsystemId,
"mottaker" to mottaker,
),
).asUpdateAndReturnGeneratedKey,
)
sessionOf(dataSource, returnGeneratedKey = true).use { session ->
return TransactionalUtbetalingDao(session).nyttOppdrag(fagsystemId, mottaker)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.helse.modell.utbetaling

import com.fasterxml.jackson.databind.JsonNode
import kotliquery.TransactionalSession
import no.nav.helse.db.OppgaveRepository
import no.nav.helse.db.OpptegnelseRepository
import no.nav.helse.db.ReservasjonRepository
Expand Down Expand Up @@ -65,12 +66,22 @@ internal class UtbetalingEndret private constructor(
json = jsonNode.toString(),
)

override fun behandle(
override fun skalKjøresTransaksjonelt(): Boolean = true

override fun transaksjonellBehandle(
person: Person,
kommandostarter: Kommandostarter,
transactionalSession: TransactionalSession,
) {
if (gjeldendeStatus == Utbetalingsstatus.FORKASTET) person.utbetalingForkastet(utbetalingId)
this.kommandostarter { utbetalingEndret(this@UtbetalingEndret) }
this.kommandostarter { utbetalingEndret(this@UtbetalingEndret, transactionalSession) }
}

override fun behandle(
person: Person,
kommandostarter: Kommandostarter,
) {
throw UnsupportedOperationException()
}

override fun fødselsnummer(): String = fødselsnummer
Expand Down

0 comments on commit 4363d60

Please sign in to comment.