Skip to content

Commit

Permalink
Bedre håndtering ikke hvis vi ikke treffer en definert route (#5740)
Browse files Browse the repository at this point in the history
* Haandterer ikke funnet route separat

* Fjerner direkte retur av NotFound som status

Siden vi vil fange opp kall mot ruter vi ikke kjenner igjen separat,
fjernes all bruk av call.respond(404), siden dette skjer som fallback hvis ruten ikke finne.

* Legger til sakId i tester for endringer i GenerellBehandlingService

* Siste iverksatt route skal kaste en feil
  • Loading branch information
oyvindsh authored Sep 20, 2024
1 parent 025f9f3 commit 5ead062
Show file tree
Hide file tree
Showing 23 changed files with 293 additions and 187 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import no.nav.etterlatte.libs.common.behandling.Prosesstype
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.feilhaandtering.GenerellIkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.grunnlag.Grunnlagsopplysning
import no.nav.etterlatte.libs.common.grunnlag.NyeSaksopplysninger
Expand Down Expand Up @@ -180,7 +181,7 @@ class BehandlingFactory(
kilde: Vedtaksloesning,
request: DataHentetForOpprettBehandling,
prosessType: Prosesstype = Prosesstype.MANUELL,
): BehandlingOgOppgave? {
): BehandlingOgOppgave {
logger.info("Starter behandling i sak $sakId")

return if (request.harIverksattBehandling()) {
Expand Down Expand Up @@ -211,8 +212,13 @@ class BehandlingFactory(
kilde,
prosessType,
)
?: return null
runBlocking { grunnlagService.leggInnNyttGrunnlag(behandling, persongalleri, HardkodaSystembruker.opprettGrunnlag) }
runBlocking {
grunnlagService.leggInnNyttGrunnlag(
behandling,
persongalleri,
HardkodaSystembruker.opprettGrunnlag,
)
}
val oppgave =
oppgaveService.opprettFoerstegangsbehandlingsOppgaveForInnsendtSoeknad(
referanse = behandling.id.toString(),
Expand Down Expand Up @@ -247,7 +253,8 @@ class BehandlingFactory(
inTransaction {
val sak = sakService.finnSak(sakId) ?: throw GenerellIkkeFunnetException()
val behandlingerISak = behandlingDao.hentBehandlingerForSak(sakId)
val foerstegangsbehandlinger = behandlingerISak.filter { it.type == BehandlingType.FØRSTEGANGSBEHANDLING }
val foerstegangsbehandlinger =
behandlingerISak.filter { it.type == BehandlingType.FØRSTEGANGSBEHANDLING }
if (foerstegangsbehandlinger.isEmpty()) {
throw AvslagOmgjoering.IngenFoerstegangsbehandling()
}
Expand All @@ -270,7 +277,9 @@ class BehandlingFactory(
}

val sisteAvslaatteBehandling =
behandlingerISak.filter { it.status == BehandlingStatus.AVSLAG }.maxByOrNull { it.behandlingOpprettet }
behandlingerISak
.filter { it.status == BehandlingStatus.AVSLAG }
.maxByOrNull { it.behandlingOpprettet }

val foerstegangsbehandlingViOmgjoerer =
foerstegangsbehandlinger.maxBy { it.behandlingOpprettet }
Expand Down Expand Up @@ -378,7 +387,7 @@ class BehandlingFactory(
mottattDato: String?,
kilde: Vedtaksloesning,
prosessType: Prosesstype,
): Behandling? {
): Behandling {
behandlingerUnderBehandling.forEach {
behandlingDao.lagreStatus(it.id, BehandlingStatus.AVBRUTT, LocalDateTime.now())
oppgaveService.avbrytAapneOppgaverMedReferanse(it.id.toString())
Expand All @@ -399,6 +408,10 @@ class BehandlingFactory(
logger.info("Opprettet behandling ${opprettBehandling.id} i sak ${opprettBehandling.sakId}")

behandlingDao.hentBehandling(opprettBehandling.id)
?: throw InternfeilException(
"Behandlingen vi akkurat opprettet finnes ikke i databasen. Id burde være " +
"${opprettBehandling.id}, i sak ${opprettBehandling.sakId}",
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ import no.nav.etterlatte.libs.common.behandling.NyBehandlingRequest
import no.nav.etterlatte.libs.common.behandling.RedigertFamilieforhold
import no.nav.etterlatte.libs.common.behandling.SendBrev
import no.nav.etterlatte.libs.common.behandling.Utlandstilknytning
import no.nav.etterlatte.libs.common.feilhaandtering.GenerellIkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.IkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.grunnlag.Grunnlagsopplysning
import no.nav.etterlatte.libs.common.gyldigSoeknad.GyldighetsResultat
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
Expand Down Expand Up @@ -68,7 +71,8 @@ internal fun Route.behandlingRoutes(
val request = call.receive<NyBehandlingRequest>()
request.validerPersongalleri()

val gjeldendeEnhet = inTransaction { behandlingFactory.finnGjeldendeEnhet(request.persongalleri, request.sakType) }
val gjeldendeEnhet =
inTransaction { behandlingFactory.finnGjeldendeEnhet(request.persongalleri, request.sakType) }

kunSkrivetilgang(enhetNr = gjeldendeEnhet) {
val behandling = behandlingFactory.opprettSakOgBehandlingForOppgave(request, brukerTokenInfo)
Expand All @@ -79,7 +83,8 @@ internal fun Route.behandlingRoutes(
post("/api/behandling/omgjoer-avslag-avbrudd/{$SAKID_CALL_PARAMETER}") {
kunSaksbehandlerMedSkrivetilgang { saksbehandler ->
val skalKopiereRequest = call.receive<OmgjoeringRequest>()
val behandlingOgOppgave = behandlingFactory.opprettOmgjoeringAvslag(sakId, saksbehandler, skalKopiereRequest.skalKopiere)
val behandlingOgOppgave =
behandlingFactory.opprettOmgjoeringAvslag(sakId, saksbehandler, skalKopiereRequest.skalKopiere)
call.respond(behandlingOgOppgave.toBehandlingSammendrag())
}
}
Expand Down Expand Up @@ -111,7 +116,7 @@ internal fun Route.behandlingRoutes(
)
}
) {
null -> call.respond(HttpStatusCode.NotFound)
null -> throw GenerellIkkeFunnetException()
else -> call.respond(HttpStatusCode.OK, lagretGyldighetsResultat)
}
}
Expand All @@ -132,8 +137,11 @@ internal fun Route.behandlingRoutes(
inTransaction { kommerBarnetTilGodeService.lagreKommerBarnetTilgode(kommerBarnetTilgode) }
call.respond(HttpStatusCode.OK, kommerBarnetTilgode)
} catch (e: TilstandException.UgyldigTilstand) {
logger.warn("Ugyldig tilstand for lagre kommer barnet til gode", e)
call.respond(HttpStatusCode.BadRequest, "Kunne ikke endre på feltet")
throw UgyldigForespoerselException(
"UGYLDIG_TILSTAND_BEHANDLING",
"Ugyldig tilstand i behandling for å lagre kommer barnet til gode",
cause = e,
)
}
}
}
Expand Down Expand Up @@ -353,7 +361,10 @@ internal fun Route.behandlingRoutes(
logger.info("Henter detaljert behandling for behandling med id=$behandlingId")
when (val behandling = inTransaction { behandlingService.hentDetaljertBehandling(behandlingId, brukerTokenInfo) }) {
is DetaljertBehandling -> call.respond(behandling)
else -> call.respond(HttpStatusCode.NotFound, "Fant ikke behandling med id=$behandlingId")
else -> throw IkkeFunnetException(
"FANT_IKKE_BEHANDLING",
"Fant ikke behandling med id=$behandlingId",
)
}
}

Expand All @@ -375,22 +386,18 @@ internal fun Route.behandlingRoutes(
inTransaction {
behandlingFactory.hentDataForOpprettBehandling(behandlingsBehov.sakId)
}
when (
val behandling =
inTransaction {
behandlingFactory.opprettBehandling(
behandlingsBehov.sakId,
behandlingsBehov.persongalleri,
behandlingsBehov.mottattDato,
Vedtaksloesning.GJENNY,
request = request,
)
}?.also { it.sendMeldingForHendelse() }
?.behandling
) {
null -> call.respond(HttpStatusCode.NotFound)
else -> call.respondText(behandling.id.toString())
}
val behandlingOgOppgave =
inTransaction {
behandlingFactory.opprettBehandling(
behandlingsBehov.sakId,
behandlingsBehov.persongalleri,
behandlingsBehov.mottattDato,
Vedtaksloesning.GJENNY,
request = request,
)
}
behandlingOgOppgave.sendMeldingForHendelse()
call.respondText(behandlingOgOppgave.behandling.id.toString())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,23 @@ import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.feilhaandtering.IkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.oppgave.SakIdOgReferanse
import no.nav.etterlatte.libs.common.oppgave.VedtakEndringDTO
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.vedtak.VedtakType
import no.nav.etterlatte.libs.ktor.token.brukerTokenInfo
import no.nav.etterlatte.tilgangsstyring.kunSkrivetilgang
import java.util.UUID

class BehandlingIkkeFunnetException(
sakId: SakId,
behandlingId: String,
) : IkkeFunnetException("BEHANLDING_IKKE_FUNNET", "Behandling med $behandlingId ble ikke funnet i sak $sakId") {
constructor(referanse: SakIdOgReferanse) : this(referanse.sakId, referanse.referanse)
}

internal fun Route.behandlingVedtakRoute(
behandlingsstatusService: BehandlingStatusService,
behandlingService: BehandlingService,
Expand All @@ -29,24 +39,21 @@ internal fun Route.behandlingVedtakRoute(
behandlingService.hentBehandling(
UUID.fromString(vedtak.sakIdOgReferanse.referanse),
)
} ?: throw BehandlingIkkeFunnetException(vedtak.sakIdOgReferanse)
inTransaction {
behandlingsstatusService.settFattetVedtak(behandling, vedtak, brukerTokenInfo)

if (vedtak.vedtakType == VedtakType.OPPHOER) {
behandlingService.lagreOpphoerFom(
behandling.id,
vedtak.opphoerFraOgMed ?: throw UgyldigForespoerselException(
code = "MANGLER_OPPHOER_FOM",
detail = "Vedtak for ${behandling.id} mangler opphør fra og med dato",
),
)
}
if (behandling == null) {
call.respond(HttpStatusCode.NotFound, "Fant ingen behandling")
} else {
inTransaction {
behandlingsstatusService.settFattetVedtak(behandling, vedtak, brukerTokenInfo)
if (vedtak.vedtakType == VedtakType.OPPHOER) {
behandlingService.lagreOpphoerFom(
behandling.id,
vedtak.opphoerFraOgMed ?: throw UgyldigForespoerselException(
code = "MANGLER_OPPHOER_FOM",
detail = "Vedtak for ${behandling.id} mangler opphør fra og med dato",
),
)
}
}
call.respond(HttpStatusCode.OK)
}
call.respond(HttpStatusCode.OK)
}
}
}
Expand All @@ -60,15 +67,11 @@ internal fun Route.behandlingVedtakRoute(
behandlingService.hentBehandling(
UUID.fromString(underkjennVedtakOppgave.sakIdOgReferanse.referanse),
)
}
if (behandling == null) {
call.respond(HttpStatusCode.NotFound, "Fant ingen behandling")
} else {
inTransaction {
behandlingsstatusService.settReturnertVedtak(behandling, underkjennVedtakOppgave)
}
call.respond(HttpStatusCode.OK)
} ?: throw BehandlingIkkeFunnetException(underkjennVedtakOppgave.sakIdOgReferanse)
inTransaction {
behandlingsstatusService.settReturnertVedtak(behandling, underkjennVedtakOppgave)
}
call.respond(HttpStatusCode.OK)
}
}
}
Expand All @@ -82,15 +85,11 @@ internal fun Route.behandlingVedtakRoute(
behandlingService.hentBehandling(
UUID.fromString(attesterVedtakOppgave.sakIdOgReferanse.referanse),
)
}
if (behandling == null) {
call.respond(HttpStatusCode.NotFound, "Fant ingen behandling")
} else {
inTransaction {
behandlingsstatusService.settAttestertVedtak(behandling, attesterVedtakOppgave, brukerTokenInfo)
}
call.respond(HttpStatusCode.OK)
} ?: throw BehandlingIkkeFunnetException(attesterVedtakOppgave.sakIdOgReferanse)
inTransaction {
behandlingsstatusService.settAttestertVedtak(behandling, attesterVedtakOppgave, brukerTokenInfo)
}
call.respond(HttpStatusCode.OK)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.behandling.OpprettAktivitetspliktOppfolging
import no.nav.etterlatte.libs.common.behandling.OpprettOppgaveForAktivitetspliktVarigUnntakDto
import no.nav.etterlatte.libs.common.behandling.OpprettRevurderingForAktivitetspliktDto
import no.nav.etterlatte.libs.common.feilhaandtering.IkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.ktor.route.BEHANDLINGID_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.OPPGAVEID_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.SAKID_CALL_PARAMETER
Expand Down Expand Up @@ -161,7 +163,13 @@ internal fun Route.aktivitetspliktRoutes(aktivitetspliktService: Aktivitetsplikt
logger.info("Henter aktivitetspliktDto for statistikk")
val dto =
inTransaction {
runBlocking { aktivitetspliktService.hentAktivitetspliktDto(sakId, brukerTokenInfo, behandlingId) }
runBlocking {
aktivitetspliktService.hentAktivitetspliktDto(
sakId,
brukerTokenInfo,
behandlingId,
)
}
}
call.respond(dto)
}
Expand Down Expand Up @@ -220,14 +228,18 @@ internal fun Route.aktivitetspliktRoutes(aktivitetspliktService: Aktivitetsplikt
route("/api/sak/{$SAKID_CALL_PARAMETER}/oppgave/{$OPPGAVEID_CALL_PARAMETER}/aktivitetsplikt/vurdering") {
get {
logger.info("Henter aktivitetsplikt vurdering for oppgaveId=$oppgaveId")
val vurdering = inTransaction { aktivitetspliktService.hentVurderingForOppgaveGammel(oppgaveId) }
call.respond(vurdering ?: HttpStatusCode.NotFound)
val vurdering =
inTransaction { aktivitetspliktService.hentVurderingForOppgaveGammel(oppgaveId) }
?: throw VurderingIkkeFunnetException(sakId, oppgaveId)
call.respond(vurdering)
}

get("/ny") {
logger.info("Henter ny aktivitetsplikt vurdering for oppgaveId=$oppgaveId")
val vurdering = inTransaction { aktivitetspliktService.hentVurderingForOppgave(oppgaveId) }
call.respond(vurdering ?: HttpStatusCode.NotFound)
val vurdering =
inTransaction { aktivitetspliktService.hentVurderingForOppgave(oppgaveId) }
?: throw VurderingIkkeFunnetException(sakId, oppgaveId)
call.respond(vurdering)
}

post("/aktivitetsgrad") {
Expand Down Expand Up @@ -266,14 +278,18 @@ internal fun Route.aktivitetspliktRoutes(aktivitetspliktService: Aktivitetsplikt
route("/api/sak/{$SAKID_CALL_PARAMETER}/behandling/{$BEHANDLINGID_CALL_PARAMETER}/aktivitetsplikt/vurdering") {
get {
logger.info("Henter aktivitetsplikt vurdering for behandlingId=$behandlingId")
val vurdering = inTransaction { aktivitetspliktService.hentVurderingForBehandlingGammel(behandlingId) }
call.respond(vurdering ?: HttpStatusCode.NotFound)
val vurdering =
inTransaction { aktivitetspliktService.hentVurderingForBehandlingGammel(behandlingId) }
?: throw VurderingIkkeFunnetException(sakId, behandlingId)
call.respond(vurdering)
}

get("/ny") {
logger.info("Henter ny aktivitetsplikt vurdering for behandlingId=$behandlingId")
val vurdering = inTransaction { aktivitetspliktService.hentVurderingForBehandling(behandlingId) }
call.respond(vurdering ?: HttpStatusCode.NotFound)
val vurdering =
inTransaction { aktivitetspliktService.hentVurderingForBehandling(behandlingId) }
?: throw VurderingIkkeFunnetException(sakId, behandlingId)
call.respond(vurdering)
}

post("/aktivitetsgrad") {
Expand Down Expand Up @@ -309,3 +325,8 @@ internal fun Route.aktivitetspliktRoutes(aktivitetspliktService: Aktivitetsplikt
}
}
}

class VurderingIkkeFunnetException(
sakId: SakId,
referanse: UUID,
) : IkkeFunnetException("VURDERING_IKKE_FUNNET", "Fant ikke vurdering i sak=$sakId med referanse=$referanse")
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package no.nav.etterlatte.behandling.bosattutland

import io.ktor.http.HttpStatusCode
import io.ktor.server.application.call
import io.ktor.server.request.receive
import io.ktor.server.response.respond
Expand All @@ -9,6 +8,7 @@ import io.ktor.server.routing.get
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.feilhaandtering.GenerellIkkeFunnetException
import no.nav.etterlatte.libs.ktor.route.BEHANDLINGID_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.behandlingId
import no.nav.etterlatte.libs.ktor.route.kunSaksbehandler
Expand All @@ -25,10 +25,10 @@ internal fun Route.bosattUtlandRoutes(bosattUtlandService: BosattUtlandService)
}
get {
kunSaksbehandler {
when (val bosattUtland = inTransaction { bosattUtlandService.hentBosattUtland(behandlingId) }) {
null -> call.respond(HttpStatusCode.NotFound)
else -> call.respond(bosattUtland)
}
val bosattUtland =
inTransaction { bosattUtlandService.hentBosattUtland(behandlingId) }
?: throw GenerellIkkeFunnetException()
call.respond(bosattUtland)
}
}
}
Expand Down
Loading

0 comments on commit 5ead062

Please sign in to comment.