diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dbo/TiltakstypeDbo.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dbo/TiltakstypeDbo.kt index 068e572042..7e17563f50 100644 --- a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dbo/TiltakstypeDbo.kt +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dbo/TiltakstypeDbo.kt @@ -2,10 +2,8 @@ package no.nav.mulighetsrommet.domain.dbo import kotlinx.serialization.Serializable import no.nav.mulighetsrommet.domain.serializers.LocalDateSerializer -import no.nav.mulighetsrommet.domain.serializers.LocalDateTimeSerializer import no.nav.mulighetsrommet.domain.serializers.UUIDSerializer import java.time.LocalDate -import java.time.LocalDateTime import java.util.* @Serializable @@ -14,13 +12,9 @@ data class TiltakstypeDbo( val id: UUID, val navn: String, val arenaKode: String, - @Serializable(with = LocalDateTimeSerializer::class) - val registrertDatoIArena: LocalDateTime, - @Serializable(with = LocalDateTimeSerializer::class) - val sistEndretDatoIArena: LocalDateTime, @Serializable(with = LocalDateSerializer::class) - val fraDato: LocalDate, + val startDato: LocalDate, @Serializable(with = LocalDateSerializer::class) - val tilDato: LocalDate, + val sluttDato: LocalDate?, val rettPaaTiltakspenger: Boolean, ) diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Innsatsgruppe.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Innsatsgruppe.kt new file mode 100644 index 0000000000..565d35fb00 --- /dev/null +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Innsatsgruppe.kt @@ -0,0 +1,8 @@ +package no.nav.mulighetsrommet.domain.dto + +enum class Innsatsgruppe { + STANDARD_INNSATS, + SITUASJONSBESTEMT_INNSATS, + SPESIELT_TILPASSET_INNSATS, + VARIG_TILPASSET_INNSATS, +} diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeAdminDto.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeAdminDto.kt index 81958ac85f..dbf7e54980 100644 --- a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeAdminDto.kt +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeAdminDto.kt @@ -2,10 +2,8 @@ package no.nav.mulighetsrommet.domain.dto import kotlinx.serialization.Serializable import no.nav.mulighetsrommet.domain.serializers.LocalDateSerializer -import no.nav.mulighetsrommet.domain.serializers.LocalDateTimeSerializer import no.nav.mulighetsrommet.domain.serializers.UUIDSerializer import java.time.LocalDate -import java.time.LocalDateTime import java.util.* @Serializable @@ -14,16 +12,11 @@ data class TiltakstypeAdminDto( val id: UUID, val navn: String, val arenaKode: String, - @Serializable(with = LocalDateTimeSerializer::class) - val registrertIArenaDato: LocalDateTime, - @Serializable(with = LocalDateTimeSerializer::class) - val sistEndretIArenaDato: LocalDateTime, @Serializable(with = LocalDateSerializer::class) - val fraDato: LocalDate, + val startDato: LocalDate, @Serializable(with = LocalDateSerializer::class) - val tilDato: LocalDate, - val rettPaaTiltakspenger: Boolean, - val status: Tiltakstypestatus, + val sluttDato: LocalDate?, + val status: TiltakstypeStatus, @Serializable(with = UUIDSerializer::class) val sanityId: UUID?, val personopplysninger: Map>, diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeStatus.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeStatus.kt new file mode 100644 index 0000000000..2b953654b3 --- /dev/null +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/TiltakstypeStatus.kt @@ -0,0 +1,6 @@ +package no.nav.mulighetsrommet.domain.dto + +enum class TiltakstypeStatus { + AKTIV, + AVSLUTTET, +} diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Tiltakstypestatus.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Tiltakstypestatus.kt deleted file mode 100644 index 476ae6921e..0000000000 --- a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Tiltakstypestatus.kt +++ /dev/null @@ -1,22 +0,0 @@ -package no.nav.mulighetsrommet.domain.dto - -import java.time.LocalDate - -enum class Tiltakstypestatus { - Aktiv, - Planlagt, - Avsluttet, - ; - - companion object { - fun resolveFromDates( - now: LocalDate, - startDato: LocalDate, - sluttDato: LocalDate, - ): Tiltakstypestatus = when { - now < startDato -> Planlagt - now <= sluttDato -> Aktiv - else -> Avsluttet - } - } -} diff --git a/frontend/mr-admin-flate/src/components/statuselementer/TiltakstypestatusTag.tsx b/frontend/mr-admin-flate/src/components/statuselementer/TiltakstypestatusTag.tsx index 66c8a2b027..9af418e223 100644 --- a/frontend/mr-admin-flate/src/components/statuselementer/TiltakstypestatusTag.tsx +++ b/frontend/mr-admin-flate/src/components/statuselementer/TiltakstypestatusTag.tsx @@ -1,5 +1,5 @@ import { Tag } from "@navikt/ds-react"; -import { Tiltakstype, Tiltakstypestatus } from "mulighetsrommet-api-client"; +import { Tiltakstype, TiltakstypeStatus } from "mulighetsrommet-api-client"; interface Props { tiltakstype: Tiltakstype; @@ -8,13 +8,11 @@ interface Props { export function TiltakstypestatusTag({ tiltakstype }: Props) { const status = tiltakstype.status; - const variant = (status: Tiltakstypestatus) => { + const variant = (status: TiltakstypeStatus) => { switch (status) { - case Tiltakstypestatus.AKTIV: + case TiltakstypeStatus.AKTIV: return "success"; - case Tiltakstypestatus.PLANLAGT: - return "alt1"; - case Tiltakstypestatus.AVSLUTTET: + case TiltakstypeStatus.AVSLUTTET: return "neutral"; } }; diff --git a/frontend/mr-admin-flate/src/components/tabell/TiltakstypeTabell.tsx b/frontend/mr-admin-flate/src/components/tabell/TiltakstypeTabell.tsx index 6078f07813..15440f2d5d 100644 --- a/frontend/mr-admin-flate/src/components/tabell/TiltakstypeTabell.tsx +++ b/frontend/mr-admin-flate/src/components/tabell/TiltakstypeTabell.tsx @@ -64,6 +64,8 @@ export function TiltakstypeTabell() { {tiltakstyper.length > 0 ? ( {tiltakstyper.map((tiltakstype, index) => { + const startDato = formaterDato(tiltakstype.startDato); + const sluttDato = tiltakstype.sluttDato ? formaterDato(tiltakstype.sluttDato) : "-"; return ( {tiltakstype.navn} - - {formaterDato(tiltakstype.fraDato)} + + {startDato} - - {formaterDato(tiltakstype.tilDato)} + + {sluttDato} diff --git a/frontend/mr-admin-flate/src/mocks/fixtures/mock_tiltakstyper.ts b/frontend/mr-admin-flate/src/mocks/fixtures/mock_tiltakstyper.ts index f71aa2093c..c45a2f79e6 100644 --- a/frontend/mr-admin-flate/src/mocks/fixtures/mock_tiltakstyper.ts +++ b/frontend/mr-admin-flate/src/mocks/fixtures/mock_tiltakstyper.ts @@ -3,7 +3,7 @@ import { PaginertTiltakstype, Personopplysning, TiltakskodeArena, - Tiltakstypestatus, + TiltakstypeStatus, VeilederflateInnsatsgruppe, VeilederflateTiltakstype, } from "mulighetsrommet-api-client"; @@ -106,9 +106,9 @@ export const mockTiltakstyper = { id: "59a64a02-efdd-471d-9529-356ff5553a5d", navn: "Arbeidsforberedende trening (AFT)", arenaKode: TiltakskodeArena.ARBFORB, - fraDato: "2016-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2016-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "d03363e0-7d46-411b-aec4-fb9449e30eb8", personopplysninger, }, @@ -116,9 +116,9 @@ export const mockTiltakstyper = { id: "1d5bf722-02aa-4aa5-97e2-f359ea307a14", navn: "Arbeidsrettet rehabilitering (dag)", arenaKode: TiltakskodeArena.ARBRRHDAG, - fraDato: "2012-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2012-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "29c3d3cb-ffbf-4c22-8ffc-fea5d7f6c822", personopplysninger, }, @@ -126,9 +126,9 @@ export const mockTiltakstyper = { id: "938c2e7b-91d6-4eee-97d3-a110ccbc5968", navn: "Avklaring", arenaKode: TiltakskodeArena.AVKLARAG, - fraDato: "2009-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2009-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "f9618e97-4510-49e2-b748-29cae84d9019", personopplysninger, }, @@ -136,9 +136,9 @@ export const mockTiltakstyper = { id: "e47447e3-bbe4-4c41-839d-f352130b2e8a", navn: "Digitalt oppfølgingstiltak for arbeidsledige (jobbklubb)", arenaKode: TiltakskodeArena.DIGIOPPARB, - fraDato: "2021-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2021-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "3526de0d-ad4c-4b81-b072-a13b3a4b4ed3", personopplysninger, }, @@ -146,9 +146,9 @@ export const mockTiltakstyper = { id: "9b52265c-914c-413d-bca4-e9d7b3f1bd8d", navn: "Gruppe AMO", arenaKode: TiltakskodeArena.GRUPPEAMO, - fraDato: "2019-07-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2019-07-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "eadeb22c-bd89-4298-a5c2-145f112f8e7d", personopplysninger, }, @@ -156,9 +156,9 @@ export const mockTiltakstyper = { id: "53ecc473-c0ce-40ea-88c3-9f4a3131080b", navn: "Gruppe Fag- og yrkesopplæring VGS og høyere yrkesfaglig utdanning", arenaKode: TiltakskodeArena.GRUFAGYRKE, - fraDato: "2019-07-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2019-07-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "7f353dcd-37c2-42f8-bab6-ac2a60669839", personopplysninger, }, @@ -166,9 +166,9 @@ export const mockTiltakstyper = { id: "95766f55-a456-4c4b-9a77-ca61ae214409", navn: "Jobbklubb", arenaKode: TiltakskodeArena.JOBBK, - fraDato: "2003-10-10", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2003-10-10", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "31e72dd8-ad05-4e81-a7f9-fd4c8f295864", personopplysninger, }, @@ -176,9 +176,9 @@ export const mockTiltakstyper = { id: "71a51692-35c5-4951-84eb-a338b0a57210", navn: "Oppfølging", arenaKode: TiltakskodeArena.INDOPPFAG, - fraDato: "2009-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2009-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "5ac48c03-1f4c-4d4b-b862-050caca92080", personopplysninger, }, @@ -186,9 +186,9 @@ export const mockTiltakstyper = { id: "6fb921d6-0a87-4b8a-82a4-067477c1e113", navn: "Varig tilrettelagt arbeid i skjermet virksomhet", arenaKode: TiltakskodeArena.VASV, - fraDato: "2001-01-01", - tilDato: "2099-01-01", - status: Tiltakstypestatus.AKTIV, + startDato: "2001-01-01", + sluttDato: "2099-01-01", + status: TiltakstypeStatus.AKTIV, sanityId: "02509279-0a0f-4bd6-b506-f40111e4ba14", personopplysninger, }, diff --git a/frontend/mr-admin-flate/src/pages/tiltakstyper/TiltakstypeInfo.tsx b/frontend/mr-admin-flate/src/pages/tiltakstyper/TiltakstypeInfo.tsx index 935c525960..64b538ce28 100644 --- a/frontend/mr-admin-flate/src/pages/tiltakstyper/TiltakstypeInfo.tsx +++ b/frontend/mr-admin-flate/src/pages/tiltakstyper/TiltakstypeInfo.tsx @@ -2,11 +2,11 @@ import { ExternalLinkIcon } from "@navikt/aksel-icons"; import classNames from "classnames"; import { Link } from "react-router-dom"; import { useTiltakstypeById } from "@/api/tiltakstyper/useTiltakstypeById"; -import { Bolk } from "../../components/detaljside/Bolk"; -import { Metadata, Separator } from "../../components/detaljside/Metadata"; -import { formaterDato } from "../../utils/Utils"; +import { Bolk } from "@/components/detaljside/Bolk"; +import { Metadata, Separator } from "@/components/detaljside/Metadata"; +import { formaterDato } from "@/utils/Utils"; import styles from "../DetaljerInfo.module.scss"; -import { SANITY_STUDIO_URL } from "../../constants"; +import { SANITY_STUDIO_URL } from "@/constants"; export function TiltakstypeInfo() { const { data: tiltakstype } = useTiltakstypeById(); @@ -26,8 +26,11 @@ export function TiltakstypeInfo() { - - + + {tiltakstype.sanityId && ( <> diff --git a/iac/kafka-manager/dev/kafka-manager-dev.yaml b/iac/kafka-manager/dev/kafka-manager-dev.yaml index 46a6b38415..05e87bafbe 100644 --- a/iac/kafka-manager/dev/kafka-manager-dev.yaml +++ b/iac/kafka-manager/dev/kafka-manager-dev.yaml @@ -90,6 +90,12 @@ spec: "keyDeserializerType": "STRING", "valueDeserializerType": "STRING" }, + { + "name": "team-mulighetsrommet.siste-tiltakstyper-v2", + "location": "AIVEN", + "keyDeserializerType": "STRING", + "valueDeserializerType": "STRING" + }, { "name": "team-mulighetsrommet.arena-migrering-tiltaksgjennomforinger-v1", "location": "AIVEN", diff --git a/iac/kafka-manager/prod/kafka-manager-prod.yaml b/iac/kafka-manager/prod/kafka-manager-prod.yaml index 15d6ef948b..0d72653fc3 100644 --- a/iac/kafka-manager/prod/kafka-manager-prod.yaml +++ b/iac/kafka-manager/prod/kafka-manager-prod.yaml @@ -84,12 +84,18 @@ spec: "keyDeserializerType": "STRING", "valueDeserializerType": "STRING" }, - { + { "name": "team-mulighetsrommet.siste-tiltakstyper-v1", "location": "AIVEN", "keyDeserializerType": "STRING", "valueDeserializerType": "STRING" }, + { + "name": "team-mulighetsrommet.siste-tiltakstyper-v2", + "location": "AIVEN", + "keyDeserializerType": "STRING", + "valueDeserializerType": "STRING" + }, { "name": "team-mulighetsrommet.arena-migrering-tiltaksgjennomforinger-v1", "location": "AIVEN", diff --git a/iac/kafka-topics/dev/siste-tiltakstyper-v2.yaml b/iac/kafka-topics/dev/siste-tiltakstyper-v2.yaml new file mode 100644 index 0000000000..1e14a93935 --- /dev/null +++ b/iac/kafka-topics/dev/siste-tiltakstyper-v2.yaml @@ -0,0 +1,34 @@ +apiVersion: kafka.nais.io/v1 +kind: Topic +metadata: + name: siste-tiltakstyper-v2 + namespace: team-mulighetsrommet + labels: + team: team-mulighetsrommet +spec: + pool: nav-dev + config: + cleanupPolicy: compact + minimumInSyncReplicas: 2 + partitions: 2 + replication: 3 + acl: + - team: team-mulighetsrommet + application: mulighetsrommet-api + access: readwrite + - team: team-mulighetsrommet + application: mulighetsrommet-kafka-manager + access: read + + # Komet + - team: amt + application: amt-deltaker + access: read + - team: amt + application: amt-deltaker-bff + access: read + + # DVH + - team: teamoppfolging + application: teamoppfolging-kafka + access: read diff --git a/iac/kafka-topics/prod/siste-tiltakstyper-v2.yaml b/iac/kafka-topics/prod/siste-tiltakstyper-v2.yaml new file mode 100644 index 0000000000..617e41bd23 --- /dev/null +++ b/iac/kafka-topics/prod/siste-tiltakstyper-v2.yaml @@ -0,0 +1,37 @@ +apiVersion: kafka.nais.io/v1 +kind: Topic +metadata: + name: siste-tiltakstyper-v2 + namespace: team-mulighetsrommet + labels: + team: team-mulighetsrommet +spec: + pool: nav-prod + config: + cleanupPolicy: compact + minimumInSyncReplicas: 2 + partitions: 2 + replication: 3 + acl: + - team: team-mulighetsrommet + application: mulighetsrommet-api + access: readwrite + - team: team-mulighetsrommet + application: mulighetsrommet-kafka-manager + access: read + + # Komet + - team: amt + application: amt-deltaker + access: read + - team: amt + application: amt-deltaker-bff + access: read + - team: amt + application: amt-kafka-manager + access: read + + # DVH + - team: teamoppfolging + application: teamoppfolging-kafka + access: read diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/clients/vedtak/VedtakDto.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/clients/vedtak/VedtakDto.kt index d8e10e86ff..0907fe90bd 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/clients/vedtak/VedtakDto.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/clients/vedtak/VedtakDto.kt @@ -5,13 +5,19 @@ import kotlinx.serialization.Serializable @Serializable data class VedtakDto( val innsatsgruppe: Innsatsgruppe, -) +) { + enum class Innsatsgruppe { + STANDARD_INNSATS, + SITUASJONSBESTEMT_INNSATS, + SPESIELT_TILPASSET_INNSATS, + VARIG_TILPASSET_INNSATS, -@Serializable -enum class Innsatsgruppe { - STANDARD_INNSATS, - SITUASJONSBESTEMT_INNSATS, - SPESIELT_TILPASSET_INNSATS, - GRADERT_VARIG_TILPASSET_INNSATS, - VARIG_TILPASSET_INNSATS, + /** + * Denne innsatsgruppen er definert i veilarbvedtaksstotte, men vi har enda ikke implementert + * støtte for den i våre systemer. + * Hvis en bruker har innsatsgruppen GRADERT_VARIG_TILPASSET_INNSATS så har den samme + * rettigheter som VARIG_TILPASSET_INNSATS. + */ + GRADERT_VARIG_TILPASSET_INNSATS, + } } diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/domain/dto/TiltakstypeEksternDto.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/domain/dto/TiltakstypeEksternDto.kt index b65a064f27..8cc72c18a8 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/domain/dto/TiltakstypeEksternDto.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/domain/dto/TiltakstypeEksternDto.kt @@ -2,12 +2,8 @@ package no.nav.mulighetsrommet.api.domain.dto import kotlinx.serialization.Serializable import no.nav.mulighetsrommet.domain.Tiltakskode -import no.nav.mulighetsrommet.domain.dto.Tiltakstypestatus -import no.nav.mulighetsrommet.domain.serializers.LocalDateSerializer -import no.nav.mulighetsrommet.domain.serializers.LocalDateTimeSerializer +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.domain.serializers.UUIDSerializer -import java.time.LocalDate -import java.time.LocalDateTime import java.util.* @Serializable @@ -16,16 +12,7 @@ data class TiltakstypeEksternDto( val id: UUID, val navn: String, val tiltakskode: Tiltakskode, - val arenaKode: String, - @Serializable(with = LocalDateTimeSerializer::class) - val registrertIArenaDato: LocalDateTime, - @Serializable(with = LocalDateTimeSerializer::class) - val sistEndretIArenaDato: LocalDateTime, - @Serializable(with = LocalDateSerializer::class) - val fraDato: LocalDate, - @Serializable(with = LocalDateSerializer::class) - val tilDato: LocalDate, - val rettPaaTiltakspenger: Boolean, - val status: Tiltakstypestatus, + val innsatsgrupper: Set, + val arenaKode: String?, val deltakerRegistreringInnhold: DeltakerRegistreringInnholdDto?, ) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/plugins/DependencyInjection.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/plugins/DependencyInjection.kt index c930b238c5..ab81f0e579 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/plugins/DependencyInjection.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/plugins/DependencyInjection.kt @@ -300,7 +300,6 @@ private fun services(appConfig: AppConfig) = module { get(), get(), get(), - get(), ) } single { @@ -374,7 +373,6 @@ private fun tasks(config: TaskConfig) = module { get(), get(), ) - val updateTiltakstypeStatus = UpdateTiltakstypeStatus(get(), get(), get()) val synchronizeNorgEnheterTask = SynchronizeNorgEnheter(config.synchronizeNorgEnheter, get(), get()) val notifySluttdatoForGjennomforingerNarmerSeg = NotifySluttdatoForGjennomforingerNarmerSeg( config.notifySluttdatoForGjennomforingerNarmerSeg, @@ -415,7 +413,6 @@ private fun tasks(config: TaskConfig) = module { deleteExpiredTiltakshistorikk.task, synchronizeNorgEnheterTask.task, updateTiltaksgjennomforingStatus.task, - updateTiltakstypeStatus.task, synchronizeNavAnsatte.task, notifySluttdatoForGjennomforingerNarmerSeg.task, notifySluttdatoForAvtalerNarmerSeg.task, diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepository.kt index d66b2f78de..82b960dd2b 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepository.kt @@ -8,7 +8,6 @@ import kotliquery.Session import kotliquery.TransactionalSession import kotliquery.queryOf import no.nav.mulighetsrommet.api.clients.norg2.Norg2Type -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe import no.nav.mulighetsrommet.api.domain.dbo.ArenaNavEnhet import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetDbo import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetStatus @@ -24,6 +23,7 @@ import no.nav.mulighetsrommet.domain.dbo.ArenaTiltaksgjennomforingDbo import no.nav.mulighetsrommet.domain.dbo.Avslutningsstatus import no.nav.mulighetsrommet.domain.dbo.TiltaksgjennomforingOppstartstype import no.nav.mulighetsrommet.domain.dto.AvbruttAarsak +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.domain.dto.NavIdent import no.nav.mulighetsrommet.domain.dto.TiltaksgjennomforingStatus import org.intellij.lang.annotations.Language @@ -471,14 +471,14 @@ class TiltaksgjennomforingRepository(private val db: Database) { search: String? = null, apentForInnsok: Boolean? = null, sanityTiltakstypeIds: List? = null, - innsatsgrupper: List = emptyList(), + innsatsgruppe: Innsatsgruppe? = null, brukersEnheter: List, ): List { val parameters = mapOf( "search" to search?.let { "%${it.replace("/", "#").trim()}%" }, "apent_for_innsok" to apentForInnsok, "sanityTiltakstypeIds" to sanityTiltakstypeIds?.let { db.createUuidArray(it) }, - "innsatsgrupper" to db.createTextArray(innsatsgrupper.map { it.name }), + "innsatsgruppe" to innsatsgruppe?.name, "brukersEnheter" to db.createTextArray(brukersEnheter), ) @@ -529,7 +529,7 @@ class TiltaksgjennomforingRepository(private val db: Database) { and gjennomforing.avbrutt_tidspunkt is null and (gjennomforing.slutt_dato is null or gjennomforing.slutt_dato > now()) and (:search::text is null or ((lower(gjennomforing.navn) like lower(:search)) or (gjennomforing.tiltaksnummer like :search))) and (:sanityTiltakstypeIds::uuid[] is null or tiltakstype.sanity_id = any(:sanityTiltakstypeIds)) - and (:innsatsgrupper::innsatsgruppe[] is null or tiltakstype.innsatsgruppe = any(:innsatsgrupper::innsatsgruppe[])) + and (:innsatsgruppe::innsatsgruppe is null or :innsatsgruppe::innsatsgruppe = any(tiltakstype.innsatsgrupper)) and (:apent_for_innsok::boolean is null or gjennomforing.apent_for_innsok = :apent_for_innsok) group by gjennomforing.id, tiltakstype.id, arrangor.id, a.id having array_agg(nav_enhet.enhetsnummer) && :brukersEnheter diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepository.kt index 8d57a69da6..8ef3dafcab 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepository.kt @@ -2,6 +2,7 @@ package no.nav.mulighetsrommet.api.repositories import kotlinx.serialization.json.Json import kotliquery.Row +import kotliquery.Session import kotliquery.queryOf import no.nav.mulighetsrommet.api.domain.dto.DeltakerRegistreringInnholdDto import no.nav.mulighetsrommet.api.domain.dto.Innholdselement @@ -10,19 +11,19 @@ import no.nav.mulighetsrommet.database.Database import no.nav.mulighetsrommet.database.utils.* import no.nav.mulighetsrommet.domain.Tiltakskode import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.domain.dto.PersonopplysningMedFrekvens import no.nav.mulighetsrommet.domain.dto.TiltakstypeAdminDto -import no.nav.mulighetsrommet.domain.dto.Tiltakstypestatus +import no.nav.mulighetsrommet.domain.dto.TiltakstypeStatus import org.intellij.lang.annotations.Language import org.slf4j.LoggerFactory -import java.time.LocalDate import java.util.* class TiltakstypeRepository(private val db: Database) { private val logger = LoggerFactory.getLogger(javaClass) - fun upsert(tiltakstype: TiltakstypeDbo): TiltakstypeDbo { + fun upsert(tiltakstype: TiltakstypeDbo) { logger.info("Lagrer tiltakstype id=${tiltakstype.id}") @Language("PostgreSQL") @@ -32,10 +33,8 @@ class TiltakstypeRepository(private val db: Database) { navn, tiltakskode, arena_kode, - registrert_dato_i_arena, - sist_endret_dato_i_arena, - fra_dato, - til_dato, + start_dato, + slutt_dato, rett_paa_tiltakspenger ) values ( @@ -43,25 +42,21 @@ class TiltakstypeRepository(private val db: Database) { :navn, :tiltakskode::tiltakskode, :arena_kode, - :registrert_dato_i_arena, - :sist_endret_dato_i_arena, - :fra_dato, - :til_dato, + :start_dato, + :slutt_dato, :rett_paa_tiltakspenger ) on conflict (id) do update set navn = excluded.navn, tiltakskode = excluded.tiltakskode, arena_kode = excluded.arena_kode, - registrert_dato_i_arena = excluded.registrert_dato_i_arena, - sist_endret_dato_i_arena = excluded.sist_endret_dato_i_arena, - fra_dato = excluded.fra_dato, - til_dato = excluded.til_dato, + start_dato = excluded.start_dato, + slutt_dato = excluded.slutt_dato, rett_paa_tiltakspenger = excluded.rett_paa_tiltakspenger returning * """.trimIndent() - return queryOf(query, tiltakstype.toSqlParameters()).map { it.toTiltakstypeDbo() }.asSingle.let { db.run(it)!! } + queryOf(query, tiltakstype.toSqlParameters()).asExecute.let { db.run(it) } } fun get(id: UUID): TiltakstypeAdminDto? { @@ -75,24 +70,19 @@ class TiltakstypeRepository(private val db: Database) { return db.run(queryResult) } - fun getEksternTiltakstype(id: UUID): TiltakstypeEksternDto? { - val tiltakstype = get(id) ?: return null - val tiltakskode = Tiltakskode.fromArenaKode(tiltakstype.arenaKode) ?: return null - val deltakerRegistreringInnhold = getDeltakerregistreringInnholdByArenaKode(tiltakskode) + fun getEksternTiltakstype(id: UUID): TiltakstypeEksternDto? = db.useSession { session -> + @Language("PostgreSQL") + val query = """ + select id, navn, tiltakskode, arena_kode, innsatsgrupper + from tiltakstype + where id = ?::uuid + """.trimIndent() - return TiltakstypeEksternDto( - id = tiltakstype.id, - navn = tiltakstype.navn, - tiltakskode = tiltakskode, - arenaKode = tiltakstype.arenaKode, - registrertIArenaDato = tiltakstype.registrertIArenaDato, - sistEndretIArenaDato = tiltakstype.sistEndretIArenaDato, - fraDato = tiltakstype.fraDato, - tilDato = tiltakstype.tilDato, - rettPaaTiltakspenger = tiltakstype.rettPaaTiltakspenger, - status = tiltakstype.status, - deltakerRegistreringInnhold = deltakerRegistreringInnhold, - ) + val deltakerRegistreringInnhold = getDeltakerregistreringInnhold(id, session) + + queryOf(query, id) + .map { it.tiltakstypeEksternDto(deltakerRegistreringInnhold) } + .asSingle.runWithSession(session) } fun getByTiltakskode(tiltakskode: Tiltakskode): TiltakstypeAdminDto { @@ -140,7 +130,7 @@ class TiltakstypeRepository(private val db: Database) { fun getAllSkalMigreres( pagination: Pagination = Pagination.all(), - statuser: List = emptyList(), + statuser: List = emptyList(), sortering: String? = null, ): PaginatedResult { val parameters = mapOf( @@ -150,10 +140,10 @@ class TiltakstypeRepository(private val db: Database) { val order = when (sortering) { "navn-ascending" -> "navn asc" "navn-descending" -> "navn desc" - "startdato-ascending" -> "fra_dato asc" - "startdato-descending" -> "fra_dato desc" - "sluttdato-ascending" -> "til_dato asc" - "sluttdato-descending" -> "til_dato desc" + "startdato-ascending" -> "start_dato asc" + "startdato-descending" -> "start_dato desc" + "sluttdato-ascending" -> "slutt_dato asc" + "sluttdato-descending" -> "slutt_dato desc" else -> "navn asc" } @@ -175,36 +165,30 @@ class TiltakstypeRepository(private val db: Database) { } } - private fun getDeltakerregistreringInnholdByArenaKode(tiltakskode: Tiltakskode): DeltakerRegistreringInnholdDto? { + private fun getDeltakerregistreringInnhold(id: UUID, session: Session): DeltakerRegistreringInnholdDto? { @Language("PostgreSQL") val query = """ - select dri.innholdskode, tekst, tt.deltaker_registrering_ledetekst - from tiltakstype tt - left join tiltakstype_deltaker_registrering_innholdselement tdri on tdri.tiltakskode = tt.tiltakskode - left join deltaker_registrering_innholdselement dri on tdri.innholdskode = dri.innholdskode - where tt.tiltakskode = ?::tiltakskode and tt.deltaker_registrering_ledetekst is not null; + select tiltakstype.deltaker_registrering_ledetekst, element.innholdskode, element.tekst + from tiltakstype + left join tiltakstype_deltaker_registrering_innholdselement tiltakstype_innholdselement on tiltakstype_innholdselement.tiltakskode = tiltakstype.tiltakskode + left join deltaker_registrering_innholdselement element on tiltakstype_innholdselement.innholdskode = element.innholdskode + where tiltakstype.id = ?::uuid and tiltakstype.deltaker_registrering_ledetekst is not null; """.trimIndent() - val result = queryOf(query, tiltakskode.name) + val result = queryOf(query, id) .map { - val innholdskode = it.stringOrNull("innholdskode") - val tekst = it.stringOrNull("tekst") val ledetekst = it.string("deltaker_registrering_ledetekst") + val tekst = it.stringOrNull("tekst") + val innholdskode = it.stringOrNull("innholdskode") val innholdselement = if (tekst != null && innholdskode != null) { - Innholdselement( - tekst = tekst, - innholdskode = innholdskode, - ) + Innholdselement(tekst = tekst, innholdskode = innholdskode) } else { null } - Pair( - ledetekst, - innholdselement, - ) + Pair(ledetekst, innholdselement) } .asList - .let { db.run(it) } + .runWithSession(session) if (result.isEmpty()) return null @@ -215,30 +199,6 @@ class TiltakstypeRepository(private val db: Database) { ) } - fun getAllByDateInterval( - dateIntervalStart: LocalDate, - dateIntervalEnd: LocalDate, - ): List { - logger.info("Henter alle tiltakstyper med start- eller sluttdato mellom $dateIntervalStart og $dateIntervalEnd") - - @Language("PostgreSQL") - val query = """ - select * - from tiltakstype_admin_dto_view - where - (fra_dato > :date_interval_start and fra_dato <= :date_interval_end) or - (til_dato >= :date_interval_start and til_dato < :date_interval_end) - """.trimIndent() - - return queryOf( - query, - mapOf( - "date_interval_start" to dateIntervalStart, - "date_interval_end" to dateIntervalEnd, - ), - ).map { it.toTiltakstypeAdminDto() }.asList.let { db.run(it) } - } - fun delete(id: UUID): QueryResult = query { logger.info("Sletter tiltakstype id=$id") @@ -256,30 +216,12 @@ class TiltakstypeRepository(private val db: Database) { "navn" to navn, "tiltakskode" to Tiltakskode.fromArenaKode(arenaKode)?.name, "arena_kode" to arenaKode, - "registrert_dato_i_arena" to registrertDatoIArena, - "sist_endret_dato_i_arena" to sistEndretDatoIArena, - "fra_dato" to fraDato, - "til_dato" to tilDato, + "start_dato" to startDato, + "slutt_dato" to sluttDato, "rett_paa_tiltakspenger" to rettPaaTiltakspenger, ) - private fun Row.toTiltakstypeDbo(): TiltakstypeDbo { - return TiltakstypeDbo( - id = uuid("id"), - navn = string("navn"), - arenaKode = string("arena_kode"), - registrertDatoIArena = localDateTime("registrert_dato_i_arena"), - sistEndretDatoIArena = localDateTime("sist_endret_dato_i_arena"), - fraDato = localDate("fra_dato"), - tilDato = localDate("til_dato"), - rettPaaTiltakspenger = boolean("rett_paa_tiltakspenger"), - ) - } - private fun Row.toTiltakstypeAdminDto(): TiltakstypeAdminDto { - val fraDato = localDate("fra_dato") - val tilDato = localDate("til_dato") - val personopplysninger = Json.decodeFromString>(string("personopplysninger")) .groupBy({ it.frekvens }, { it.personopplysning.toPersonopplysningMedBeskrivelse() }) @@ -287,14 +229,28 @@ class TiltakstypeRepository(private val db: Database) { id = uuid("id"), navn = string("navn"), arenaKode = string("arena_kode"), - registrertIArenaDato = localDateTime("registrert_dato_i_arena"), - sistEndretIArenaDato = localDateTime("sist_endret_dato_i_arena"), - fraDato = fraDato, - tilDato = tilDato, + startDato = localDate("start_dato"), + sluttDato = localDateOrNull("slutt_dato"), sanityId = uuidOrNull("sanity_id"), - rettPaaTiltakspenger = boolean("rett_paa_tiltakspenger"), - status = Tiltakstypestatus.valueOf(string("status")), + status = TiltakstypeStatus.valueOf(string("status")), personopplysninger = personopplysninger, ) } + + private fun Row.tiltakstypeEksternDto( + deltakerRegistreringInnhold: DeltakerRegistreringInnholdDto?, + ): TiltakstypeEksternDto { + val innsatsgrupper = arrayOrNull("innsatsgrupper") + ?.map { Innsatsgruppe.valueOf(it) } + ?.toSet() + ?: emptySet() + return TiltakstypeEksternDto( + id = uuid("id"), + navn = string("navn"), + tiltakskode = Tiltakskode.valueOf(string("tiltakskode")), + innsatsgrupper = innsatsgrupper, + arenaKode = string("arena_kode"), + deltakerRegistreringInnhold = deltakerRegistreringInnhold, + ) + } } diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/ArenaAdapterRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/ArenaAdapterRoutes.kt index 5b05e649c4..d100b87439 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/ArenaAdapterRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/ArenaAdapterRoutes.kt @@ -9,7 +9,10 @@ import io.ktor.server.util.* import io.ktor.util.logging.* import io.ktor.util.pipeline.* import no.nav.mulighetsrommet.api.services.ArenaAdapterService -import no.nav.mulighetsrommet.domain.dbo.* +import no.nav.mulighetsrommet.domain.dbo.ArenaAvtaleDbo +import no.nav.mulighetsrommet.domain.dbo.ArenaTiltaksgjennomforingDbo +import no.nav.mulighetsrommet.domain.dbo.ArenaTiltakshistorikkDbo +import no.nav.mulighetsrommet.domain.dbo.DeltakerDbo import org.koin.ktor.ext.inject import org.postgresql.util.PSQLException import java.util.* @@ -20,23 +23,6 @@ fun Route.arenaAdapterRoutes() { val arenaAdapterService: ArenaAdapterService by inject() route("/api/v1/internal/arena/") { - put("tiltakstype") { - val tiltakstype = call.receive() - - call.respond(arenaAdapterService.upsertTiltakstype(tiltakstype)) - } - - delete("tiltakstype/{id}") { - val id = call.parameters.getOrFail("id") - - arenaAdapterService.removeTiltakstype(id) - .map { call.response.status(HttpStatusCode.OK) } - .mapLeft { - logError(logger, it.error) - call.respond(HttpStatusCode.InternalServerError, "Kunne ikke slette tiltakstype") - } - } - put("avtale") { val dbo = call.receive() diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/VeilederflateRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/VeilederflateRoutes.kt index 7259fe3ffc..45fd8dc280 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/VeilederflateRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/routes/v1/VeilederflateRoutes.kt @@ -18,6 +18,7 @@ import no.nav.mulighetsrommet.api.plugins.AuthProvider import no.nav.mulighetsrommet.api.plugins.getNavAnsattAzureId import no.nav.mulighetsrommet.api.services.PoaoTilgangService import no.nav.mulighetsrommet.api.services.VeilederflateService +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.ktor.exception.StatusException import org.koin.ktor.ext.inject import java.util.* @@ -37,7 +38,7 @@ fun Route.veilederflateRoutes() { return ArbeidsmarkedstiltakFilter( enheter = enheter, - innsatsgruppe = queryParameters["innsatsgruppe"], + innsatsgruppe = queryParameters["innsatsgruppe"]?.let { Innsatsgruppe.valueOf(it) }, tiltakstyper = queryParameters.getAll("tiltakstyper"), search = queryParameters["search"], apentForInnsok = apentForInnsok, @@ -184,7 +185,7 @@ fun Route.veilederflateRoutes() { data class ArbeidsmarkedstiltakFilter( val enheter: NonEmptyList, - val innsatsgruppe: String?, + val innsatsgruppe: Innsatsgruppe?, val tiltakstyper: List?, val search: String?, val apentForInnsok: ApentForInnsok, diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterService.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterService.kt index 6b46f76efe..4862cccc1d 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterService.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterService.kt @@ -17,9 +17,7 @@ import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetStatus import no.nav.mulighetsrommet.api.domain.dto.AvtaleAdminDto import no.nav.mulighetsrommet.api.domain.dto.TiltaksgjennomforingAdminDto import no.nav.mulighetsrommet.api.domain.dto.TiltaksgjennomforingDto -import no.nav.mulighetsrommet.api.domain.dto.TiltakstypeEksternDto import no.nav.mulighetsrommet.api.repositories.* -import no.nav.mulighetsrommet.api.tasks.InitialLoadTiltaksgjennomforinger import no.nav.mulighetsrommet.api.utils.EnhetFilter import no.nav.mulighetsrommet.database.Database import no.nav.mulighetsrommet.database.utils.QueryResult @@ -29,7 +27,10 @@ import no.nav.mulighetsrommet.domain.Tiltakskoder import no.nav.mulighetsrommet.domain.Tiltakskoder.isEgenRegiTiltak import no.nav.mulighetsrommet.domain.constants.ArenaMigrering import no.nav.mulighetsrommet.domain.constants.ArenaMigrering.TiltaksgjennomforingSluttDatoCutoffDate -import no.nav.mulighetsrommet.domain.dbo.* +import no.nav.mulighetsrommet.domain.dbo.ArenaAvtaleDbo +import no.nav.mulighetsrommet.domain.dbo.ArenaTiltaksgjennomforingDbo +import no.nav.mulighetsrommet.domain.dbo.ArenaTiltakshistorikkDbo +import no.nav.mulighetsrommet.domain.dbo.DeltakerDbo import no.nav.mulighetsrommet.domain.dto.Avtalestatus import no.nav.mulighetsrommet.domain.dto.NavIdent import no.nav.mulighetsrommet.domain.dto.TiltakstypeAdminDto @@ -60,41 +61,9 @@ class ArenaAdapterService( private val endringshistorikk: EndringshistorikkService, private val veilarboppfolgingClient: VeilarboppfolgingClient, private val tiltakstypeService: TiltakstypeService, - private val initialLoadTiltaksgjennomforinger: InitialLoadTiltaksgjennomforinger, ) { private val logger = LoggerFactory.getLogger(javaClass) - fun upsertTiltakstype(tiltakstype: TiltakstypeDbo): TiltakstypeDbo { - val current = tiltakstyper.get(tiltakstype.id) - return tiltakstyper.upsert(tiltakstype) - .also { - val eksternDto = tiltakstyper.getEksternTiltakstype(tiltakstype.id) - if (eksternDto != null) { - tiltakstypeKafkaProducer.publish(eksternDto) - - if (tiltakstypeNavnHasChanged(current, eksternDto)) { - val input = InitialLoadTiltaksgjennomforinger.Input( - tiltakstyper = listOf(eksternDto.tiltakskode), - ) - initialLoadTiltaksgjennomforinger.schedule(input) - } - } - } - } - - private fun tiltakstypeNavnHasChanged( - current: TiltakstypeAdminDto?, - eksternDto: TiltakstypeEksternDto, - ) = current != null && current.navn != eksternDto.navn - - fun removeTiltakstype(id: UUID): QueryResult { - return tiltakstyper.delete(id).onRight { deletedRows -> - if (deletedRows != 0) { - tiltakstypeKafkaProducer.retract(id) - } - } - } - suspend fun upsertAvtale(avtale: ArenaAvtaleDbo): AvtaleAdminDto { syncArrangorFromBrreg(avtale.arrangorOrganisasjonsnummer) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/BrukerService.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/BrukerService.kt index 02f42f5515..f38254d5d0 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/BrukerService.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/BrukerService.kt @@ -11,10 +11,11 @@ import no.nav.mulighetsrommet.api.clients.oppfolging.OppfolgingError import no.nav.mulighetsrommet.api.clients.oppfolging.VeilarboppfolgingClient import no.nav.mulighetsrommet.api.clients.person.PersonError import no.nav.mulighetsrommet.api.clients.person.VeilarbpersonClient -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe +import no.nav.mulighetsrommet.api.clients.vedtak.VedtakDto import no.nav.mulighetsrommet.api.clients.vedtak.VedtakError import no.nav.mulighetsrommet.api.clients.vedtak.VeilarbvedtaksstotteClient import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetDbo +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.ktor.exception.StatusException class BrukerService( @@ -124,7 +125,7 @@ class BrukerService( return Brukerdata( fnr = fnr, - innsatsgruppe = sisteVedtak?.innsatsgruppe, + innsatsgruppe = sisteVedtak?.innsatsgruppe?.let { toInnsatsgruppe(it) }, enheter = enheter, fornavn = personInfo.fornavn, manuellStatus = manuellStatus, @@ -159,6 +160,15 @@ class BrukerService( } } +private fun toInnsatsgruppe(innsatsgruppe: VedtakDto.Innsatsgruppe): Innsatsgruppe { + return when (innsatsgruppe) { + VedtakDto.Innsatsgruppe.STANDARD_INNSATS -> Innsatsgruppe.STANDARD_INNSATS + VedtakDto.Innsatsgruppe.SITUASJONSBESTEMT_INNSATS -> Innsatsgruppe.SITUASJONSBESTEMT_INNSATS + VedtakDto.Innsatsgruppe.SPESIELT_TILPASSET_INNSATS -> Innsatsgruppe.SPESIELT_TILPASSET_INNSATS + VedtakDto.Innsatsgruppe.GRADERT_VARIG_TILPASSET_INNSATS, VedtakDto.Innsatsgruppe.VARIG_TILPASSET_INNSATS -> Innsatsgruppe.VARIG_TILPASSET_INNSATS + } +} + fun oppfolgingsenhetLokalOgUlik( geografiskEnhet: NavEnhetDbo?, oppfolgingsenhet: NavEnhetDbo?, diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/TiltaksgjennomforingService.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/TiltaksgjennomforingService.kt index c47810b695..ab36bd0d83 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/TiltaksgjennomforingService.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/TiltaksgjennomforingService.kt @@ -6,7 +6,6 @@ import arrow.core.toNonEmptyListOrNull import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement import kotliquery.TransactionalSession -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe import no.nav.mulighetsrommet.api.domain.dbo.TiltaksgjennomforingDbo import no.nav.mulighetsrommet.api.domain.dto.* import no.nav.mulighetsrommet.api.repositories.AvtaleRepository @@ -22,6 +21,7 @@ import no.nav.mulighetsrommet.domain.Tiltakskode import no.nav.mulighetsrommet.domain.Tiltakskoder.isTiltakMedAvtalerFraMulighetsrommet import no.nav.mulighetsrommet.domain.constants.ArenaMigrering.TiltaksgjennomforingSluttDatoCutoffDate import no.nav.mulighetsrommet.domain.dto.AvbruttAarsak +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.domain.dto.NavIdent import no.nav.mulighetsrommet.kafka.producers.TiltaksgjennomforingKafkaProducer import no.nav.mulighetsrommet.notifications.NotificationRepository @@ -103,13 +103,13 @@ class TiltaksgjennomforingService( search: String?, apentForInnsok: Boolean?, sanityTiltakstypeIds: List?, - innsatsgrupper: List, + innsatsgruppe: Innsatsgruppe?, enheter: List, ): List = tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( search, apentForInnsok, sanityTiltakstypeIds, - innsatsgrupper, + innsatsgruppe, enheter, ) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/VeilederflateService.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/VeilederflateService.kt index d2ef87412b..73861a5617 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/VeilederflateService.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/services/VeilederflateService.kt @@ -8,11 +8,11 @@ import io.prometheus.client.cache.caffeine.CacheMetricsCollector import no.nav.mulighetsrommet.api.clients.sanity.SanityClient import no.nav.mulighetsrommet.api.clients.sanity.SanityParam import no.nav.mulighetsrommet.api.clients.sanity.SanityPerspective -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe import no.nav.mulighetsrommet.api.domain.dto.* import no.nav.mulighetsrommet.api.routes.v1.ApentForInnsok import no.nav.mulighetsrommet.api.utils.utledInnsatsgrupper import no.nav.mulighetsrommet.domain.dbo.TiltaksgjennomforingOppstartstype +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.metrics.Metrikker import no.nav.mulighetsrommet.utils.CacheUtils import java.util.* @@ -122,7 +122,7 @@ class VeilederflateService( suspend fun hentTiltaksgjennomforinger( enheter: NonEmptyList, - innsatsgruppe: String? = null, + innsatsgruppe: Innsatsgruppe? = null, tiltakstypeIds: List? = null, search: String? = null, apentForInnsok: ApentForInnsok = ApentForInnsok.APENT_ELLER_STENGT, @@ -165,9 +165,7 @@ class VeilederflateService( val gruppeGjennomforinger = tiltaksgjennomforingService.getAllVeilederflateTiltaksgjennomforing( search = search, sanityTiltakstypeIds = tiltakstypeIds?.map { UUID.fromString(it) }, - innsatsgrupper = innsatsgruppe - ?.let { utledInnsatsgrupper(innsatsgruppe).map { Innsatsgruppe.valueOf(it) } } - ?: emptyList(), + innsatsgruppe = innsatsgruppe, enheter = enheter, apentForInnsok = when (apentForInnsok) { ApentForInnsok.APENT -> true diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatus.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatus.kt deleted file mode 100644 index ff160376d3..0000000000 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatus.kt +++ /dev/null @@ -1,52 +0,0 @@ -package no.nav.mulighetsrommet.api.tasks - -import com.github.kagkarlsson.scheduler.task.helper.RecurringTask -import com.github.kagkarlsson.scheduler.task.helper.Tasks -import com.github.kagkarlsson.scheduler.task.schedule.Daily -import kotlinx.coroutines.runBlocking -import no.nav.mulighetsrommet.api.repositories.TiltakstypeRepository -import no.nav.mulighetsrommet.kafka.producers.TiltakstypeKafkaProducer -import no.nav.mulighetsrommet.slack.SlackNotifier -import org.slf4j.LoggerFactory -import java.time.LocalDate -import java.time.LocalTime -import java.time.ZoneId - -class UpdateTiltakstypeStatus( - slackNotifier: SlackNotifier, - private val tiltakstypeRepository: TiltakstypeRepository, - private val tiltakstypeKafkaProducer: TiltakstypeKafkaProducer, -) { - private val logger = LoggerFactory.getLogger(javaClass) - - val task: RecurringTask = Tasks - .recurring(javaClass.name, Daily(LocalTime.MIDNIGHT)) - .onFailure { _, _ -> - slackNotifier.sendMessage("Klarte ikke synkronisere tiltakstypestatuser på kafka. Konsekvensen er at statuser på tiltakstyper kan være utdaterte på kafka.") - } - .execute { _, context -> - runBlocking { - logger.info("Kjører synkronisering av tiltakstypestatuser på kafka") - - val lastSuccessDate = context.execution.lastSuccess - ?.let { LocalDate.ofInstant(it, ZoneId.systemDefault()) } - ?: LocalDate.of(2023, 2, 1) - - oppdaterTiltakstypestatus(LocalDate.now(), lastSuccessDate) - } - } - - fun oppdaterTiltakstypestatus(today: LocalDate, lastSuccessDate: LocalDate) { - logger.info("Oppdaterer statuser for tiltakstyper med start eller sluttdato mellom $lastSuccessDate og $today") - - val eksterneTiltakstyperMedNyStatus = tiltakstypeRepository - .getAllByDateInterval(dateIntervalStart = lastSuccessDate, dateIntervalEnd = today) - .mapNotNull { tiltakstypeRepository.getEksternTiltakstype(it.id) } - - eksterneTiltakstyperMedNyStatus.forEach { - tiltakstypeKafkaProducer.publish(it) - } - - logger.info("Oppdaterte status for ${eksterneTiltakstyperMedNyStatus.size} tiltakstyper") - } -} diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/utils/SanityFilters.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/utils/SanityFilters.kt index a46b84e0ab..985c123314 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/utils/SanityFilters.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/utils/SanityFilters.kt @@ -1,29 +1,29 @@ package no.nav.mulighetsrommet.api.utils -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe -fun utledInnsatsgrupper(innsatsgruppe: String?): List { +fun utledInnsatsgrupper(innsatsgruppe: Innsatsgruppe?): List { return when (innsatsgruppe) { - Innsatsgruppe.STANDARD_INNSATS.name -> listOf( - Innsatsgruppe.STANDARD_INNSATS.name, + Innsatsgruppe.STANDARD_INNSATS -> listOf( + Innsatsgruppe.STANDARD_INNSATS, ) - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name -> listOf( - Innsatsgruppe.STANDARD_INNSATS.name, - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS -> listOf( + Innsatsgruppe.STANDARD_INNSATS, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS, ) - Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name -> listOf( - Innsatsgruppe.STANDARD_INNSATS.name, - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name, - Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name, + Innsatsgruppe.SPESIELT_TILPASSET_INNSATS -> listOf( + Innsatsgruppe.STANDARD_INNSATS, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS, + Innsatsgruppe.SPESIELT_TILPASSET_INNSATS, ) - Innsatsgruppe.VARIG_TILPASSET_INNSATS.name -> listOf( - Innsatsgruppe.STANDARD_INNSATS.name, - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name, - Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name, - Innsatsgruppe.VARIG_TILPASSET_INNSATS.name, + Innsatsgruppe.VARIG_TILPASSET_INNSATS -> listOf( + Innsatsgruppe.STANDARD_INNSATS, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS, + Innsatsgruppe.SPESIELT_TILPASSET_INNSATS, + Innsatsgruppe.VARIG_TILPASSET_INNSATS, ) else -> emptyList() diff --git a/mulighetsrommet-api/src/main/resources/application-dev.yaml b/mulighetsrommet-api/src/main/resources/application-dev.yaml index 823911ff73..2d3d08971f 100644 --- a/mulighetsrommet-api/src/main/resources/application-dev.yaml +++ b/mulighetsrommet-api/src/main/resources/application-dev.yaml @@ -33,7 +33,7 @@ app: tiltaksgjennomforinger: topic: team-mulighetsrommet.siste-tiltaksgjennomforinger-v1 tiltakstyper: - topic: team-mulighetsrommet.siste-tiltakstyper-v1 + topic: team-mulighetsrommet.siste-tiltakstyper-v2 consumers: tiltaksgjennomforingerV1: id: siste-tiltaksgjennomforinger diff --git a/mulighetsrommet-api/src/main/resources/application-local.yaml b/mulighetsrommet-api/src/main/resources/application-local.yaml index 49da9c55f0..21fa7c4ab6 100644 --- a/mulighetsrommet-api/src/main/resources/application-local.yaml +++ b/mulighetsrommet-api/src/main/resources/application-local.yaml @@ -36,7 +36,7 @@ app: tiltaksgjennomforinger: topic: siste-tiltaksgjennomforinger-v1 tiltakstyper: - topic: team-mulighetsrommet.siste-tiltakstyper-v1 + topic: team-mulighetsrommet.siste-tiltakstyper-v2 consumers: tiltaksgjennomforingerV1: id: siste-tiltaksgjennomforinger diff --git a/mulighetsrommet-api/src/main/resources/application-prod.yaml b/mulighetsrommet-api/src/main/resources/application-prod.yaml index 2f956de732..e64ad0530b 100644 --- a/mulighetsrommet-api/src/main/resources/application-prod.yaml +++ b/mulighetsrommet-api/src/main/resources/application-prod.yaml @@ -24,7 +24,7 @@ app: tiltaksgjennomforinger: topic: team-mulighetsrommet.siste-tiltaksgjennomforinger-v1 tiltakstyper: - topic: team-mulighetsrommet.siste-tiltakstyper-v1 + topic: team-mulighetsrommet.siste-tiltakstyper-v2 consumers: tiltaksgjennomforingerV1: id: siste-tiltaksgjennomforinger diff --git a/mulighetsrommet-api/src/main/resources/db/migration/R__tiltakstype_admin_view.sql b/mulighetsrommet-api/src/main/resources/db/migration/R__tiltakstype_admin_view.sql index d701cc6ca1..941b5d866f 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/R__tiltakstype_admin_view.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/R__tiltakstype_admin_view.sql @@ -6,27 +6,22 @@ select tiltakstype.navn, tiltakstype.tiltakskode, tiltakstype.arena_kode, - tiltakstype.registrert_dato_i_arena, - tiltakstype.sist_endret_dato_i_arena, - tiltakstype.fra_dato, - tiltakstype.til_dato, + tiltakstype.start_dato, + tiltakstype.slutt_dato, tiltakstype.sanity_id, - tiltakstype.rett_paa_tiltakspenger, case - when now() > til_dato then 'Avsluttet' - when now() >= fra_dato then 'Aktiv' - else 'Planlagt' + when slutt_dato is not null and now() > slutt_dato then 'AVSLUTTET' + else 'AKTIV' end as status, - COALESCE( + coalesce( jsonb_agg( jsonb_build_object( 'personopplysning', tiltakstype_personopplysning.personopplysning, 'frekvens', tiltakstype_personopplysning.frekvens ) ) - FILTER (WHERE tiltakstype_personopplysning.tiltakskode IS NOT NULL), '[]' + filter (where tiltakstype_personopplysning.tiltakskode is not null), '[]' ) as personopplysninger from tiltakstype left join tiltakstype_personopplysning on tiltakstype_personopplysning.tiltakskode = tiltakstype.tiltakskode group by tiltakstype.id - diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V141__tiltakstype_dato.sql b/mulighetsrommet-api/src/main/resources/db/migration/V141__tiltakstype_dato.sql new file mode 100644 index 0000000000..05ce148dda --- /dev/null +++ b/mulighetsrommet-api/src/main/resources/db/migration/V141__tiltakstype_dato.sql @@ -0,0 +1,28 @@ +drop view if exists tiltakstype_admin_dto_view; + +alter table tiltakstype + rename fra_dato to start_dato; +alter table tiltakstype + rename til_dato to slutt_dato; +alter table tiltakstype + alter slutt_dato drop not null, + drop sist_endret_dato_i_arena, + drop registrert_dato_i_arena; + +alter table tiltakstype + add innsatsgrupper innsatsgruppe[]; +update tiltakstype +set innsatsgrupper = array ['STANDARD_INNSATS', 'SITUASJONSBESTEMT_INNSATS', 'SPESIELT_TILPASSET_INNSATS', 'VARIG_TILPASSET_INNSATS']::innsatsgruppe[] +where innsatsgruppe = 'STANDARD_INNSATS'::innsatsgruppe; +update tiltakstype +set innsatsgrupper = array ['SITUASJONSBESTEMT_INNSATS', 'SPESIELT_TILPASSET_INNSATS', 'VARIG_TILPASSET_INNSATS']::innsatsgruppe[] +where innsatsgruppe = 'SITUASJONSBESTEMT_INNSATS'::innsatsgruppe; +update tiltakstype +set innsatsgrupper = array ['SPESIELT_TILPASSET_INNSATS', 'VARIG_TILPASSET_INNSATS']::innsatsgruppe[] +where innsatsgruppe = 'SPESIELT_TILPASSET_INNSATS'::innsatsgruppe; +update tiltakstype +set innsatsgrupper = array ['VARIG_TILPASSET_INNSATS']::innsatsgruppe[] +where innsatsgruppe = 'VARIG_TILPASSET_INNSATS'::innsatsgruppe; + +alter table tiltakstype + drop innsatsgruppe; diff --git a/mulighetsrommet-api/src/main/resources/web/openapi.yaml b/mulighetsrommet-api/src/main/resources/web/openapi.yaml index bff7aeeccf..09d12094d4 100644 --- a/mulighetsrommet-api/src/main/resources/web/openapi.yaml +++ b/mulighetsrommet-api/src/main/resources/web/openapi.yaml @@ -852,7 +852,7 @@ paths: schema: type: array items: - $ref: "#/components/schemas/Tiltakstypestatus" + $ref: "#/components/schemas/TiltakstypeStatus" description: Statuser for tiltakstyper - in: query name: page @@ -1959,12 +1959,14 @@ components: type: string arenaKode: $ref: "#/components/schemas/TiltakskodeArena" - fraDato: + startDato: type: string - tilDato: + format: date + sluttDato: type: string + format: date status: - $ref: "#/components/schemas/Tiltakstypestatus" + $ref: "#/components/schemas/TiltakstypeStatus" sanityId: type: string personopplysninger: @@ -1973,8 +1975,7 @@ components: - id - navn - arenaKode - - fraDato - - tilDato + - startDato - status - personopplysninger @@ -2548,12 +2549,11 @@ components: - SPESIELT_TILPASSET_INNSATS - VARIG_TILPASSET_INNSATS - Tiltakstypestatus: + TiltakstypeStatus: type: string enum: - - Aktiv - - Planlagt - - Avsluttet + - AKTIV + - AVSLUTTET DialogRequest: type: object diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt index d1893a73e7..7dc0f01869 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/ApplicationTestConfig.kt @@ -100,7 +100,7 @@ fun createKafkaConfig(): KafkaConfig { producerId = "mulighetsrommet-api-producer", producers = KafkaProducers( tiltaksgjennomforinger = TiltaksgjennomforingKafkaProducer.Config(topic = "siste-tiltaksgjennomforinger-v1"), - tiltakstyper = TiltakstypeKafkaProducer.Config(topic = "siste-tiltakstyper-v1"), + tiltakstyper = TiltakstypeKafkaProducer.Config(topic = "siste-tiltakstyper-v2"), arenaMigreringTiltaksgjennomforinger = ArenaMigreringTiltaksgjennomforingKafkaProducer.Config( topic = "arena-migrering-tiltaksgjennomforinger-v1", ), diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/fixtures/TiltakstypeFixtures.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/fixtures/TiltakstypeFixtures.kt index 14020a95e4..e9bf299eb7 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/fixtures/TiltakstypeFixtures.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/fixtures/TiltakstypeFixtures.kt @@ -2,7 +2,6 @@ package no.nav.mulighetsrommet.api.fixtures import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo import java.time.LocalDate -import java.time.LocalDateTime import java.util.* object TiltakstypeFixtures { @@ -11,10 +10,8 @@ object TiltakstypeFixtures { navn = "Arbeidsforberedende trening (AFT)", arenaKode = "ARBFORB", rettPaaTiltakspenger = true, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val VTA = TiltakstypeDbo( @@ -22,10 +19,8 @@ object TiltakstypeFixtures { navn = "Varig tilrettelagt arbeid i skjermet virksomhet", arenaKode = "VASV", rettPaaTiltakspenger = false, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val GRUPPE_AMO = TiltakstypeDbo( @@ -33,10 +28,8 @@ object TiltakstypeFixtures { navn = "Gruppe amo", arenaKode = "GRUPPEAMO", rettPaaTiltakspenger = false, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val Oppfolging = TiltakstypeDbo( @@ -44,10 +37,8 @@ object TiltakstypeFixtures { navn = "Oppfølging", arenaKode = "INDOPPFAG", rettPaaTiltakspenger = true, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val Jobbklubb = TiltakstypeDbo( @@ -55,10 +46,8 @@ object TiltakstypeFixtures { navn = "Jobbklubb", arenaKode = "JOBBK", rettPaaTiltakspenger = true, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val Avklaring = TiltakstypeDbo( @@ -66,10 +55,8 @@ object TiltakstypeFixtures { navn = "Avklaring", arenaKode = "AVKLARAG", rettPaaTiltakspenger = true, - fraDato = LocalDate.of(2023, 1, 1), - tilDato = LocalDate.of(2025, 12, 31), - registrertDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2023, 1, 11, 0, 0, 0), + startDato = LocalDate.of(2023, 1, 1), + sluttDato = LocalDate.of(2025, 12, 31), ) val Arbeidstrening = TiltakstypeDbo( @@ -77,10 +64,8 @@ object TiltakstypeFixtures { navn = "Arbeidstrening", arenaKode = "ARBTREN", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.of(2025, 12, 31), + startDato = LocalDate.of(2023, 1, 11), + sluttDato = LocalDate.of(2025, 12, 31), ) val EnkelAmo = TiltakstypeDbo( @@ -88,9 +73,7 @@ object TiltakstypeFixtures { navn = "Enkel AMO", arenaKode = "ENKELAMO", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.of(2025, 12, 31), + startDato = LocalDate.of(2023, 1, 11), + sluttDato = LocalDate.of(2025, 12, 31), ) } diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepositoryTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepositoryTest.kt index 0aaf266124..91938b3757 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepositoryTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltaksgjennomforingRepositoryTest.kt @@ -14,7 +14,6 @@ import kotlinx.serialization.json.Json import kotliquery.Query import kotliquery.queryOf import no.nav.mulighetsrommet.api.clients.norg2.Norg2Type -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe import no.nav.mulighetsrommet.api.createDatabaseTestConfig import no.nav.mulighetsrommet.api.domain.dbo.ArenaNavEnhet import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetDbo @@ -40,10 +39,7 @@ import no.nav.mulighetsrommet.domain.constants.ArenaMigrering import no.nav.mulighetsrommet.domain.dbo.ArenaTiltaksgjennomforingDbo import no.nav.mulighetsrommet.domain.dbo.Avslutningsstatus import no.nav.mulighetsrommet.domain.dbo.TiltaksgjennomforingOppstartstype -import no.nav.mulighetsrommet.domain.dto.AvbruttAarsak -import no.nav.mulighetsrommet.domain.dto.Faneinnhold -import no.nav.mulighetsrommet.domain.dto.NavIdent -import no.nav.mulighetsrommet.domain.dto.TiltaksgjennomforingStatus +import no.nav.mulighetsrommet.domain.dto.* import org.intellij.lang.annotations.Language import java.time.LocalDate import java.time.LocalDateTime @@ -927,15 +923,9 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ Query("update tiltakstype set sanity_id = '$oppfolgingSanityId' where id = '${TiltakstypeFixtures.Oppfolging.id}'") .asUpdate .let { database.db.run(it) } - Query("update tiltakstype set innsatsgruppe = '${Innsatsgruppe.STANDARD_INNSATS}' where id = '${TiltakstypeFixtures.Oppfolging.id}'") - .asUpdate - .let { database.db.run(it) } Query("update tiltakstype set sanity_id = '$arbeidstreningSanityId' where id = '${TiltakstypeFixtures.AFT.id}'") .asUpdate .let { database.db.run(it) } - Query("update tiltakstype set innsatsgruppe = '${Innsatsgruppe.STANDARD_INNSATS}' where id = '${TiltakstypeFixtures.AFT.id}'") - .asUpdate - .let { database.db.run(it) } tiltaksgjennomforinger.upsert(Oppfolging1.copy(sluttDato = null, navEnheter = listOf("2990"))) tiltaksgjennomforinger.setPublisert(Oppfolging1.id, true) @@ -946,28 +936,24 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ test("skal filtrere basert på om tiltaket er publisert") { tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 2 tiltaksgjennomforinger.setPublisert(Oppfolging1.id, false) tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 1 tiltaksgjennomforinger.setPublisert(AFT1.id, false) tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 0 } test("skal bare returnere tiltak markert med tiltakskode definert") { tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 2 @@ -976,7 +962,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ .let { database.db.run(it) } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 1 @@ -985,26 +970,25 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ .let { database.db.run(it) } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 0 } test("skal filtrere basert på innsatsgruppe") { - Query("update tiltakstype set innsatsgruppe = '${Innsatsgruppe.SPESIELT_TILPASSET_INNSATS}' where id = '${TiltakstypeFixtures.Oppfolging.id}'") + Query("update tiltakstype set innsatsgrupper = array ['${Innsatsgruppe.SPESIELT_TILPASSET_INNSATS}'::innsatsgruppe] where id = '${TiltakstypeFixtures.Oppfolging.id}'") .asUpdate .let { database.db.run(it) } - Query("update tiltakstype set innsatsgruppe = '${Innsatsgruppe.STANDARD_INNSATS}' where id = '${TiltakstypeFixtures.AFT.id}'") + Query("update tiltakstype set innsatsgrupper = array ['${Innsatsgruppe.STANDARD_INNSATS}'::innsatsgruppe, '${Innsatsgruppe.SPESIELT_TILPASSET_INNSATS}'::innsatsgruppe] where id = '${TiltakstypeFixtures.AFT.id}'") .asUpdate .let { database.db.run(it) } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(), + innsatsgruppe = null, brukersEnheter = listOf("2990"), - ) shouldHaveSize 0 + ) shouldHaveSize 2 tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), + innsatsgruppe = Innsatsgruppe.STANDARD_INNSATS, brukersEnheter = listOf("2990"), ).should { it shouldHaveSize 1 @@ -1012,15 +996,7 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.SPESIELT_TILPASSET_INNSATS), - brukersEnheter = listOf("2990"), - ).should { - it shouldHaveSize 1 - it[0].navn shouldBe Oppfolging1.navn - } - - tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS, Innsatsgruppe.SPESIELT_TILPASSET_INNSATS), + innsatsgruppe = Innsatsgruppe.SPESIELT_TILPASSET_INNSATS, brukersEnheter = listOf("2990"), ) shouldHaveSize 2 } @@ -1034,7 +1010,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.upsert(AFT1.copy(navEnheter = listOf("2990", "0300"))) tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("0400"), ).should { it shouldHaveSize 1 @@ -1042,7 +1017,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("0300"), ).should { it shouldHaveSize 1 @@ -1050,12 +1024,10 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ } tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("0400", "0300"), ) shouldHaveSize 2 tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 2 } @@ -1063,13 +1035,11 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ test("skal filtrere basert på tiltakstype sanity Id") { tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( sanityTiltakstypeIds = null, - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 2 tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( sanityTiltakstypeIds = listOf(oppfolgingSanityId), - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ).should { it shouldHaveSize 1 @@ -1078,7 +1048,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( sanityTiltakstypeIds = listOf(arbeidstreningSanityId), - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ).should { it shouldHaveSize 1 @@ -1092,7 +1061,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( search = "rik", - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("0502"), ).should { it shouldHaveSize 1 @@ -1112,7 +1080,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( apentForInnsok = true, - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ).should { it shouldHaveSize 1 @@ -1121,7 +1088,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( apentForInnsok = false, - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ).should { it shouldHaveSize 1 @@ -1130,7 +1096,6 @@ class TiltaksgjennomforingRepositoryTest : FunSpec({ tiltaksgjennomforinger.getAllVeilederflateTiltaksgjennomforing( apentForInnsok = null, - innsatsgrupper = listOf(Innsatsgruppe.STANDARD_INNSATS), brukersEnheter = listOf("2990"), ) shouldHaveSize 2 } diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakshistorikkRepositoryTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakshistorikkRepositoryTest.kt index 0b62ac9163..1f72ec3bf8 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakshistorikkRepositoryTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakshistorikkRepositoryTest.kt @@ -20,10 +20,8 @@ class TiltakshistorikkRepositoryTest : FunSpec({ navn = "Høyere utdanning", arenaKode = "HOYEREUTD", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.of(2023, 1, 12), + startDato = LocalDate.of(2023, 1, 11), + sluttDato = LocalDate.of(2023, 1, 12), ) beforeSpec { diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepositoryTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepositoryTest.kt index f83943be14..41bf34fd10 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepositoryTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/repositories/TiltakstypeRepositoryTest.kt @@ -5,6 +5,7 @@ import io.kotest.data.forAll import io.kotest.data.row import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.should import io.kotest.matchers.shouldBe import kotliquery.queryOf @@ -17,10 +18,9 @@ import no.nav.mulighetsrommet.domain.Tiltakskode import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo import no.nav.mulighetsrommet.domain.dto.Personopplysning import no.nav.mulighetsrommet.domain.dto.PersonopplysningFrekvens -import no.nav.mulighetsrommet.domain.dto.Tiltakstypestatus +import no.nav.mulighetsrommet.domain.dto.TiltakstypeStatus import org.intellij.lang.annotations.Language import java.time.LocalDate -import java.time.LocalDateTime import java.util.* class TiltakstypeRepositoryTest : FunSpec({ @@ -43,35 +43,29 @@ class TiltakstypeRepositoryTest : FunSpec({ context("filtrering") { val tiltakstyper = TiltakstypeRepository(database.db) - val tiltakstypePlanlagt = TiltakstypeDbo( + val tiltakstypeStarterIFremtiden = TiltakstypeDbo( id = UUID.randomUUID(), navn = "Arbeidsforberedende trening", arenaKode = "ARBFORB", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 15, 0, 0, 0), - fraDato = LocalDate.now().plusDays(1), - tilDato = LocalDate.now().plusMonths(1), + startDato = LocalDate.now().plusDays(1), + sluttDato = LocalDate.now().plusMonths(1), ) - val tiltakstypeAktiv = TiltakstypeDbo( + val tiltakstypeHarStartet = TiltakstypeDbo( id = UUID.randomUUID(), navn = "Jobbklubb", arenaKode = "JOBBK", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 15, 0, 0, 0), - fraDato = LocalDate.now(), - tilDato = LocalDate.now().plusMonths(1), + startDato = LocalDate.now(), + sluttDato = LocalDate.now().plusMonths(1), ) - val tiltakstypeAvsluttet = TiltakstypeDbo( + val tiltakstypeErAvsluttet = TiltakstypeDbo( id = UUID.randomUUID(), navn = "Oppfølgning", arenaKode = "INDOPPFAG", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 15, 0, 0, 0), - fraDato = LocalDate.now().minusMonths(1), - tilDato = LocalDate.now().minusDays(1), + startDato = LocalDate.now().minusMonths(1), + sluttDato = LocalDate.now().minusDays(1), ) val idSkalIkkeMigreres = UUID.randomUUID() val tiltakstypeSkalIkkeMigreres = TiltakstypeDbo( @@ -79,15 +73,13 @@ class TiltakstypeRepositoryTest : FunSpec({ navn = "AMOY", arenaKode = "AMOY", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 15, 0, 0, 0), - fraDato = LocalDate.now(), - tilDato = LocalDate.now().plusMonths(1), + startDato = LocalDate.now(), + sluttDato = LocalDate.now().plusMonths(1), ) - tiltakstyper.upsert(tiltakstypePlanlagt) - tiltakstyper.upsert(tiltakstypeAktiv) - tiltakstyper.upsert(tiltakstypeAvsluttet) + tiltakstyper.upsert(tiltakstypeStarterIFremtiden) + tiltakstyper.upsert(tiltakstypeHarStartet) + tiltakstyper.upsert(tiltakstypeErAvsluttet) tiltakstyper.upsert(tiltakstypeSkalIkkeMigreres) test("returnerer bare tiltak som skal migreres") { @@ -96,13 +88,12 @@ class TiltakstypeRepositoryTest : FunSpec({ test("filtrering på status") { forAll( - row(Tiltakstypestatus.Planlagt, tiltakstypePlanlagt.id), - row(Tiltakstypestatus.Aktiv, tiltakstypeAktiv.id), - row(Tiltakstypestatus.Avsluttet, tiltakstypeAvsluttet.id), - ) { status, expectedId -> + row(TiltakstypeStatus.AKTIV, listOf(tiltakstypeStarterIFremtiden.id, tiltakstypeHarStartet.id)), + row(TiltakstypeStatus.AVSLUTTET, listOf(tiltakstypeErAvsluttet.id)), + ) { status, expectedIds -> val result = tiltakstyper.getAllSkalMigreres(statuser = listOf(status)) - result.totalCount shouldBe 1 - result.items.first().id shouldBe expectedId + result.totalCount shouldBe expectedIds.size + result.items.map { it.id } shouldContainExactlyInAnyOrder expectedIds } } } @@ -144,7 +135,7 @@ class TiltakstypeRepositoryTest : FunSpec({ beforeEach { tiltakstyper.upsert(TiltakstypeFixtures.Oppfolging) tiltakstyper.upsert(TiltakstypeFixtures.VTA) - tiltakstyper.upsert(TiltakstypeFixtures.Arbeidstrening) + tiltakstyper.upsert(TiltakstypeFixtures.AFT) } test("Skal hente ut korrekt strukturert innhold for tiltakstype som har strukturert innhold") { @@ -168,13 +159,12 @@ class TiltakstypeRepositoryTest : FunSpec({ insert into tiltakstype_deltaker_registrering_innholdselement(innholdskode, tiltakskode) values('kartlegge-helse', '${Tiltakskode.OPPFOLGING.name}'); """.trimIndent() - queryOf( - query, - ).asExecute.let { database.db.run(it) } - tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.Oppfolging.id).should { - it?.navn shouldBe "Oppfølging" - it?.deltakerRegistreringInnhold?.ledetekst shouldBe "Oppfølging er et bra tiltak" - it?.deltakerRegistreringInnhold?.innholdselementer?.size shouldBe 2 + database.db.run(queryOf(query).asExecute) + + tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.Oppfolging.id).shouldNotBeNull().should { + it.navn shouldBe "Oppfølging" + it.deltakerRegistreringInnhold?.ledetekst shouldBe "Oppfølging er et bra tiltak" + it.deltakerRegistreringInnhold?.innholdselementer?.size shouldBe 2 } } @@ -185,19 +175,18 @@ class TiltakstypeRepositoryTest : FunSpec({ set deltaker_registrering_ledetekst = 'VTA er kjempebra' where tiltakskode = '${Tiltakskode.VARIG_TILRETTELAGT_ARBEID_SKJERMET.name}'; """.trimIndent() - queryOf( - query, - ).asExecute.let { database.db.run(it) } - tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.VTA.id).should { - it?.navn shouldBe "Varig tilrettelagt arbeid i skjermet virksomhet" - it?.deltakerRegistreringInnhold?.ledetekst shouldBe "VTA er kjempebra" - it?.deltakerRegistreringInnhold?.innholdselementer?.size shouldBe 0 + database.db.run(queryOf(query).asExecute) + + tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.VTA.id).shouldNotBeNull().should { + it.navn shouldBe "Varig tilrettelagt arbeid i skjermet virksomhet" + it.deltakerRegistreringInnhold?.ledetekst shouldBe "VTA er kjempebra" + it.deltakerRegistreringInnhold?.innholdselementer?.size shouldBe 0 } } test("Skal kunne hente tiltakstype uten strukturert innhold for deltakerregistrering") { - tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.Arbeidstrening.id).should { - it shouldBe null + tiltakstyper.getEksternTiltakstype(TiltakstypeFixtures.AFT.id).shouldNotBeNull().should { + it.deltakerRegistreringInnhold shouldBe null } } } @@ -215,11 +204,10 @@ class TiltakstypeRepositoryTest : FunSpec({ set sanity_id = '$sanityId' where tiltakskode = '${Tiltakskode.OPPFOLGING.name}'; """.trimIndent() - queryOf( - query, - ).asExecute.let { database.db.run(it) } - tiltakstyper.getBySanityId(sanityId).should { - it?.id shouldBe TiltakstypeFixtures.Oppfolging.id + database.db.run(queryOf(query).asExecute) + + tiltakstyper.getBySanityId(sanityId).shouldNotBeNull().should { + it.id shouldBe TiltakstypeFixtures.Oppfolging.id } } diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterServiceTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterServiceTest.kt index 74352bf942..b5cbd6bd65 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterServiceTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/ArenaAdapterServiceTest.kt @@ -21,10 +21,8 @@ import no.nav.mulighetsrommet.api.createDatabaseTestConfig import no.nav.mulighetsrommet.api.domain.dbo.ArenaNavEnhet import no.nav.mulighetsrommet.api.domain.dto.AvtaleAdminDto import no.nav.mulighetsrommet.api.domain.dto.TiltaksgjennomforingDto -import no.nav.mulighetsrommet.api.domain.dto.TiltakstypeEksternDto import no.nav.mulighetsrommet.api.fixtures.* import no.nav.mulighetsrommet.api.repositories.* -import no.nav.mulighetsrommet.api.tasks.InitialLoadTiltaksgjennomforinger import no.nav.mulighetsrommet.database.Database import no.nav.mulighetsrommet.database.kotest.extensions.FlywayDatabaseTestListener import no.nav.mulighetsrommet.database.kotest.extensions.truncateAll @@ -34,7 +32,6 @@ import no.nav.mulighetsrommet.domain.dbo.* import no.nav.mulighetsrommet.domain.dto.AvbruttAarsak import no.nav.mulighetsrommet.domain.dto.Avtaletype import no.nav.mulighetsrommet.domain.dto.TiltaksgjennomforingStatus -import no.nav.mulighetsrommet.domain.dto.Tiltakstypestatus import no.nav.mulighetsrommet.kafka.producers.TiltaksgjennomforingKafkaProducer import no.nav.mulighetsrommet.kafka.producers.TiltakstypeKafkaProducer import no.nav.mulighetsrommet.notifications.NotificationService @@ -47,106 +44,6 @@ import java.util.* class ArenaAdapterServiceTest : FunSpec({ val database = extension(FlywayDatabaseTestListener(createDatabaseTestConfig())) - context("tiltakstype") { - val tiltakstype = TiltakstypeFixtures.Oppfolging - - afterEach { - database.db.truncateAll() - - clearAllMocks() - } - - test("CRUD") { - val service = createArenaAdapterService(database.db) - service.upsertTiltakstype(tiltakstype) - - database.assertThat("tiltakstype").row() - .value("id").isEqualTo(tiltakstype.id) - .value("navn").isEqualTo(tiltakstype.navn) - - val updated = tiltakstype.copy(navn = "Arbeidsovertrening") - service.upsertTiltakstype(updated) - - database.assertThat("tiltakstype").row() - .value("navn").isEqualTo(updated.navn) - - service.removeTiltakstype(updated.id) - - database.assertThat("tiltakstype").isEmpty - } - - test("should publish and retract tiltakstype from kafka topic") { - val tiltakstypeKafkaProducer = mockk(relaxed = true) - val service = createArenaAdapterService( - database.db, - tiltakstypeKafkaProducer = tiltakstypeKafkaProducer, - ) - - service.upsertTiltakstype(tiltakstype) - - verify(exactly = 1) { - tiltakstypeKafkaProducer.publish( - TiltakstypeEksternDto( - id = tiltakstype.id, - navn = tiltakstype.navn, - tiltakskode = Tiltakskode.fromArenaKode(tiltakstype.arenaKode)!!, - arenaKode = tiltakstype.arenaKode, - registrertIArenaDato = tiltakstype.registrertDatoIArena, - sistEndretIArenaDato = tiltakstype.sistEndretDatoIArena, - fraDato = tiltakstype.fraDato, - tilDato = tiltakstype.tilDato, - rettPaaTiltakspenger = tiltakstype.rettPaaTiltakspenger, - status = Tiltakstypestatus.Aktiv, - deltakerRegistreringInnhold = null, - ), - ) - } - - service.removeTiltakstype(tiltakstype.id) - - verify(exactly = 1) { - tiltakstypeKafkaProducer.retract(tiltakstype.id) - } - } - - test("should schedule initial load of gjennomføringer when name changes") { - val initialLoadTiltaksgjennomforinger = mockk(relaxed = true) - val service = createArenaAdapterService( - database.db, - initialLoadTiltaksgjennomforinger = initialLoadTiltaksgjennomforinger, - ) - - service.upsertTiltakstype(tiltakstype) - - verify(exactly = 0) { - initialLoadTiltaksgjennomforinger.schedule(any(), any()) - } - - service.upsertTiltakstype(tiltakstype.copy(navn = "Nytt navn")) - - verify(exactly = 1) { - initialLoadTiltaksgjennomforinger.schedule( - input = InitialLoadTiltaksgjennomforinger.Input( - tiltakstyper = listOf(Tiltakskode.OPPFOLGING), - ), - startTime = any(), - ) - } - } - - test("should not retract tiltakstype if it did not already exist") { - val tiltakstypeKafkaProducer = mockk(relaxed = true) - val service = createArenaAdapterService( - database.db, - tiltakstypeKafkaProducer = tiltakstypeKafkaProducer, - ) - - service.removeTiltakstype(UUID.randomUUID()) - - verify(exactly = 0) { tiltakstypeKafkaProducer.retract(any()) } - } - } - context("avtaler") { val avtale = ArenaAvtaleDbo( id = UUID.randomUUID(), @@ -814,10 +711,8 @@ class ArenaAdapterServiceTest : FunSpec({ navn = "Høyere utdanning", arenaKode = "HOYEREUTD", rettPaaTiltakspenger = true, - registrertDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - sistEndretDatoIArena = LocalDateTime.of(2022, 1, 11, 0, 0, 0), - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.of(2023, 1, 12), + startDato = LocalDate.of(2023, 1, 11), + sluttDato = LocalDate.of(2023, 1, 12), ) val tiltakshistorikkIndividuell = ArenaTiltakshistorikkDbo.IndividueltTiltak( @@ -901,7 +796,6 @@ private fun createArenaAdapterService( notificationService: NotificationService = mockk(relaxed = true), veilarboppfolgingClient: VeilarboppfolgingClient = mockk(), migrerteTiltakstyper: List = listOf(), - initialLoadTiltaksgjennomforinger: InitialLoadTiltaksgjennomforinger = mockk(relaxed = true), ) = ArenaAdapterService( db = db, navAnsatte = NavAnsattRepository(db), @@ -919,7 +813,6 @@ private fun createArenaAdapterService( endringshistorikk = EndringshistorikkService(db), veilarboppfolgingClient = veilarboppfolgingClient, tiltakstypeService = TiltakstypeService(TiltakstypeRepository(db), migrerteTiltakstyper), - initialLoadTiltaksgjennomforinger = initialLoadTiltaksgjennomforinger, ) private fun toTiltaksgjennomforingDto(dbo: ArenaTiltaksgjennomforingDbo, tiltakstype: TiltakstypeDbo) = dbo.run { diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/BrukerServiceTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/BrukerServiceTest.kt index 71d0b1c27e..527f5f9c79 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/BrukerServiceTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/services/BrukerServiceTest.kt @@ -12,16 +12,19 @@ import io.mockk.coEvery import io.mockk.mockk import no.nav.mulighetsrommet.api.clients.AccessType import no.nav.mulighetsrommet.api.clients.norg2.Norg2Type -import no.nav.mulighetsrommet.api.clients.oppfolging.* +import no.nav.mulighetsrommet.api.clients.oppfolging.ManuellStatusDto +import no.nav.mulighetsrommet.api.clients.oppfolging.OppfolgingError +import no.nav.mulighetsrommet.api.clients.oppfolging.Oppfolgingsenhet +import no.nav.mulighetsrommet.api.clients.oppfolging.VeilarboppfolgingClient import no.nav.mulighetsrommet.api.clients.person.Enhet import no.nav.mulighetsrommet.api.clients.person.PersonDto import no.nav.mulighetsrommet.api.clients.person.PersonError import no.nav.mulighetsrommet.api.clients.person.VeilarbpersonClient -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe import no.nav.mulighetsrommet.api.clients.vedtak.VedtakDto import no.nav.mulighetsrommet.api.clients.vedtak.VeilarbvedtaksstotteClient import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetDbo import no.nav.mulighetsrommet.api.domain.dbo.NavEnhetStatus +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe import no.nav.mulighetsrommet.ktor.exception.StatusException class BrukerServiceTest : FunSpec({ @@ -58,7 +61,7 @@ class BrukerServiceTest : FunSpec({ coEvery { veilarboppfolgingClient.hentManuellStatus(fnr1, any()) } returns mockManuellStatus().right() coEvery { veilarbvedtaksstotteClient.hentSiste14AVedtak(fnr1, any()) } returns VedtakDto( - innsatsgruppe = Innsatsgruppe.STANDARD_INNSATS, + innsatsgruppe = VedtakDto.Innsatsgruppe.STANDARD_INNSATS, ).right() coEvery { veilarbpersonClient.hentPersonInfo(fnr1, any()) } returns PersonDto( @@ -75,7 +78,7 @@ class BrukerServiceTest : FunSpec({ coEvery { veilarboppfolgingClient.hentManuellStatus(fnr2, any()) } returns mockManuellStatus().right() coEvery { veilarbvedtaksstotteClient.hentSiste14AVedtak(fnr2, any()) } returns VedtakDto( - innsatsgruppe = Innsatsgruppe.GRADERT_VARIG_TILPASSET_INNSATS, + innsatsgruppe = VedtakDto.Innsatsgruppe.GRADERT_VARIG_TILPASSET_INNSATS, ).right() coEvery { veilarbpersonClient.hentPersonInfo(fnr2, any()) } returns PersonDto( diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltaksgjennomforingStatusTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltaksgjennomforingStatusTest.kt index 77a36a2adb..3baad6050e 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltaksgjennomforingStatusTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltaksgjennomforingStatusTest.kt @@ -24,8 +24,8 @@ class UpdateTiltaksgjennomforingStatusTest : FunSpec({ val today = LocalDate.of(2023, 2, 16) val tiltakstype = TiltakstypeFixtures.Oppfolging.copy( - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.now().plusYears(1), + startDato = LocalDate.of(2023, 1, 11), + sluttDato = LocalDate.now().plusYears(1), ) context("oppdater statuser på tiltaksgjennomføringer") { diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatusTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatusTest.kt deleted file mode 100644 index 0f3600db52..0000000000 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/tasks/UpdateTiltakstypeStatusTest.kt +++ /dev/null @@ -1,107 +0,0 @@ -package no.nav.mulighetsrommet.api.tasks - -import io.kotest.core.spec.style.FunSpec -import io.mockk.clearAllMocks -import io.mockk.mockk -import io.mockk.verify -import io.mockk.verifyAll -import no.nav.mulighetsrommet.api.createDatabaseTestConfig -import no.nav.mulighetsrommet.api.domain.dto.TiltakstypeEksternDto -import no.nav.mulighetsrommet.api.fixtures.MulighetsrommetTestDomain -import no.nav.mulighetsrommet.api.fixtures.TiltakstypeFixtures -import no.nav.mulighetsrommet.api.repositories.TiltakstypeRepository -import no.nav.mulighetsrommet.database.kotest.extensions.FlywayDatabaseTestListener -import no.nav.mulighetsrommet.domain.Tiltakskode -import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo -import no.nav.mulighetsrommet.domain.dto.Tiltakstypestatus -import no.nav.mulighetsrommet.kafka.producers.TiltakstypeKafkaProducer -import java.time.LocalDate -import java.util.* - -class UpdateTiltakstypeStatusTest : FunSpec({ - val database = extension(FlywayDatabaseTestListener(createDatabaseTestConfig())) - - val lastSuccessDate = LocalDate.of(2023, 2, 14) - val today = LocalDate.of(2023, 2, 16) - - val tiltakstype = TiltakstypeFixtures.Oppfolging.copy( - fraDato = LocalDate.of(2023, 1, 11), - tilDato = LocalDate.now().plusYears(1), - ) - - context("oppdater statuser på tiltakstyper") { - val tiltakstypeKafkaProducer = mockk(relaxed = true) - val kafkaSyncService = UpdateTiltakstypeStatus( - mockk(), - tiltakstypeRepository = TiltakstypeRepository(database.db), - tiltakstypeKafkaProducer = tiltakstypeKafkaProducer, - ) - - afterEach { - clearAllMocks() - } - - fun TiltakstypeDbo.toDto(tiltakstypestatus: Tiltakstypestatus): TiltakstypeEksternDto { - return TiltakstypeEksternDto( - id = id, - navn = navn, - arenaKode = arenaKode, - tiltakskode = Tiltakskode.fromArenaKode(arenaKode)!!, - registrertIArenaDato = registrertDatoIArena, - sistEndretIArenaDato = sistEndretDatoIArena, - fraDato = fraDato, - tilDato = tilDato, - rettPaaTiltakspenger = rettPaaTiltakspenger, - status = tiltakstypestatus, - deltakerRegistreringInnhold = null, - ) - } - - val startdatoInnenfor = tiltakstype.copy( - id = UUID.randomUUID(), - arenaKode = "AVKLARAG", - fraDato = LocalDate.of(2023, 2, 15), - ) - val sluttdatoInnenfor = tiltakstype.copy( - id = UUID.randomUUID(), - arenaKode = "GRUPPEAMO", - fraDato = LocalDate.of(2023, 2, 13), - tilDato = lastSuccessDate, - ) - - test("oppdater statuser på relevante tiltakstyper") { - MulighetsrommetTestDomain( - tiltakstyper = listOf(tiltakstype, startdatoInnenfor, sluttdatoInnenfor), - avtaler = listOf(), - gjennomforinger = listOf(), - ).initialize(database.db) - - kafkaSyncService.oppdaterTiltakstypestatus(today, lastSuccessDate) - - verifyAll { - tiltakstypeKafkaProducer.publish( - startdatoInnenfor.toDto(Tiltakstypestatus.Aktiv), - ) - tiltakstypeKafkaProducer.publish( - sluttdatoInnenfor.toDto(Tiltakstypestatus.Avsluttet), - ) - } - } - - test("oppdater ikke status på individuelle tiltakstyper") { - MulighetsrommetTestDomain( - tiltakstyper = listOf( - tiltakstype, - startdatoInnenfor.copy(arenaKode = "ARBTREN"), - sluttdatoInnenfor.copy(arenaKode = "ENKELAMO"), - ), - avtaler = listOf(), - gjennomforinger = listOf(), - ).initialize(database.db) - - kafkaSyncService.oppdaterTiltakstypestatus(today, lastSuccessDate) - - verify(exactly = 0) { tiltakstypeKafkaProducer.publish(any()) } - } - } -}) diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/utils/SanityFiltersKtTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/utils/SanityFiltersKtTest.kt index 89e62a591a..f99532c237 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/utils/SanityFiltersKtTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/utils/SanityFiltersKtTest.kt @@ -2,40 +2,40 @@ package no.nav.mulighetsrommet.api.utils import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe -import no.nav.mulighetsrommet.api.clients.vedtak.Innsatsgruppe +import no.nav.mulighetsrommet.domain.dto.Innsatsgruppe class SanityFiltersKtTest : FunSpec({ context("utledInnsatsgrupper") { test("utledInnsatsgrupper for standard innsats skal returnere korrekt liste med innsatsgrupper") { - val innsatsgruppe = Innsatsgruppe.STANDARD_INNSATS.name + val innsatsgruppe = Innsatsgruppe.STANDARD_INNSATS val result = utledInnsatsgrupper(innsatsgruppe) - result shouldBe listOf(Innsatsgruppe.STANDARD_INNSATS.name) + result shouldBe listOf(Innsatsgruppe.STANDARD_INNSATS) } test("utledInnsatsgrupper for situasjonsbestemt innsats skal returnere korrekt liste med innsatsgrupper") { - val innsatsgruppe = Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name + val innsatsgruppe = Innsatsgruppe.SITUASJONSBESTEMT_INNSATS val result = utledInnsatsgrupper(innsatsgruppe) - result shouldBe listOf(Innsatsgruppe.STANDARD_INNSATS.name, Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name) + result shouldBe listOf(Innsatsgruppe.STANDARD_INNSATS, Innsatsgruppe.SITUASJONSBESTEMT_INNSATS) } test("utledInnsatsgrupper for spesielt tilpasset innsats skal returnere korrekt liste med innsatsgrupper") { - val innsatsgruppe = Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name + val innsatsgruppe = Innsatsgruppe.SPESIELT_TILPASSET_INNSATS val result = utledInnsatsgrupper(innsatsgruppe) result shouldBe listOf( - Innsatsgruppe.STANDARD_INNSATS.name, - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name, - Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name, + Innsatsgruppe.STANDARD_INNSATS, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS, + Innsatsgruppe.SPESIELT_TILPASSET_INNSATS, ) } test("utledInnsatsgrupper for varig tilpasset innsats skal returnere korrekt liste med innsatsgrupper") { - val innsatsgruppe = Innsatsgruppe.VARIG_TILPASSET_INNSATS.name + val innsatsgruppe = Innsatsgruppe.VARIG_TILPASSET_INNSATS val result = utledInnsatsgrupper(innsatsgruppe) result shouldBe listOf( - Innsatsgruppe.STANDARD_INNSATS.name, - Innsatsgruppe.SITUASJONSBESTEMT_INNSATS.name, - Innsatsgruppe.SPESIELT_TILPASSET_INNSATS.name, - Innsatsgruppe.VARIG_TILPASSET_INNSATS.name, + Innsatsgruppe.STANDARD_INNSATS, + Innsatsgruppe.SITUASJONSBESTEMT_INNSATS, + Innsatsgruppe.SPESIELT_TILPASSET_INNSATS, + Innsatsgruppe.VARIG_TILPASSET_INNSATS, ) } } diff --git a/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessor.kt b/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessor.kt index 838f7af305..a4677fb2e7 100644 --- a/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessor.kt +++ b/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessor.kt @@ -3,8 +3,6 @@ package no.nav.mulighetsrommet.arena.adapter.events.processors import arrow.core.Either import arrow.core.flatMap import arrow.core.raise.either -import io.ktor.http.* -import no.nav.mulighetsrommet.arena.adapter.MulighetsrommetApiClient import no.nav.mulighetsrommet.arena.adapter.models.ProcessingError import no.nav.mulighetsrommet.arena.adapter.models.ProcessingResult import no.nav.mulighetsrommet.arena.adapter.models.arena.ArenaTable @@ -14,39 +12,26 @@ import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEvent import no.nav.mulighetsrommet.arena.adapter.models.db.Tiltakstype import no.nav.mulighetsrommet.arena.adapter.services.ArenaEntityService import no.nav.mulighetsrommet.arena.adapter.utils.ArenaUtils -import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo import java.util.* class TiltakEventProcessor( private val entities: ArenaEntityService, - private val client: MulighetsrommetApiClient, ) : ArenaEventProcessor { override val arenaTable: ArenaTable = ArenaTable.Tiltakstype override suspend fun handleEvent(event: ArenaEvent) = either { val mapping = entities.getMapping(event.arenaTable, event.arenaId).bind() - val tiltakstype = event.decodePayload() + + event.decodePayload() .toTiltakstype(mapping.entityId) .flatMap { entities.upsertTiltakstype(it) } - .bind() - val dbo = tiltakstype.toDbo() - - val response = if (event.operation == ArenaEvent.Operation.Delete) { - client.request(HttpMethod.Delete, "/api/v1/internal/arena/tiltakstype/${dbo.id}") - } else { - client.request(HttpMethod.Put, "/api/v1/internal/arena/tiltakstype", dbo) - } - response.mapLeft { ProcessingError.fromResponseException(it) } .map { ProcessingResult(Handled) } .bind() } override suspend fun deleteEntity(event: ArenaEvent): Either = either { val mapping = entities.getMapping(event.arenaTable, event.arenaId).bind() - client.request(HttpMethod.Delete, "/api/v1/internal/arena/tiltakstype/${mapping.entityId}") - .mapLeft { ProcessingError.fromResponseException(it) } - .flatMap { entities.deleteTiltakstype(mapping.entityId) } - .bind() + entities.deleteTiltakstype(mapping.entityId).bind() } private fun ArenaTiltak.toTiltakstype(id: UUID) = Either @@ -86,15 +71,4 @@ class TiltakEventProcessor( ) } .mapLeft { ProcessingError.ProcessingFailed(it.localizedMessage) } - - private fun Tiltakstype.toDbo() = TiltakstypeDbo( - id = id, - navn = navn, - arenaKode = tiltakskode, - registrertDatoIArena = registrertIArenaDato, - sistEndretDatoIArena = sistEndretIArenaDato, - fraDato = fraDato.toLocalDate(), - tilDato = tilDato.toLocalDate(), - rettPaaTiltakspenger = rettPaaTiltakspenger, - ) } diff --git a/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/plugins/DependencyInjection.kt b/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/plugins/DependencyInjection.kt index bf2491ed0d..d8a10deaf3 100644 --- a/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/plugins/DependencyInjection.kt +++ b/mulighetsrommet-arena-adapter/src/main/kotlin/no/nav/mulighetsrommet/arena/adapter/plugins/DependencyInjection.kt @@ -138,7 +138,7 @@ private fun services(services: ServiceConfig, tokenClient: MachineToMachineToken } single { val processors = listOf( - TiltakEventProcessor(get(), get()), + TiltakEventProcessor(get()), TiltakgjennomforingEventProcessor( get(), get(), diff --git a/mulighetsrommet-arena-adapter/src/test/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessorTest.kt b/mulighetsrommet-arena-adapter/src/test/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessorTest.kt index bf507dcc20..e4c6a374db 100644 --- a/mulighetsrommet-arena-adapter/src/test/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessorTest.kt +++ b/mulighetsrommet-arena-adapter/src/test/kotlin/no/nav/mulighetsrommet/arena/adapter/events/processors/TiltakEventProcessorTest.kt @@ -1,29 +1,19 @@ package no.nav.mulighetsrommet.arena.adapter.events.processors -import io.kotest.assertions.arrow.core.shouldBeLeft import io.kotest.assertions.arrow.core.shouldBeRight import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.should import io.kotest.matchers.shouldBe -import io.kotest.matchers.string.shouldContain -import io.ktor.client.engine.* -import io.ktor.client.engine.mock.* -import io.ktor.http.* -import no.nav.mulighetsrommet.arena.adapter.MulighetsrommetApiClient import no.nav.mulighetsrommet.arena.adapter.createDatabaseTestConfig import no.nav.mulighetsrommet.arena.adapter.fixtures.createArenaTiltakEvent import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEntityMapping import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEntityMapping.Status.Handled import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEvent import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEvent.Operation.* -import no.nav.mulighetsrommet.arena.adapter.models.db.ArenaEvent.ProcessingStatus.Failed import no.nav.mulighetsrommet.arena.adapter.repositories.* import no.nav.mulighetsrommet.arena.adapter.services.ArenaEntityService import no.nav.mulighetsrommet.database.kotest.extensions.FlywayDatabaseTestListener import no.nav.mulighetsrommet.database.kotest.extensions.truncateAll -import no.nav.mulighetsrommet.domain.dbo.TiltakstypeDbo -import no.nav.mulighetsrommet.ktor.decodeRequestBody -import no.nav.mulighetsrommet.ktor.getLastPathParameterAsUUID import java.time.LocalDate import java.time.LocalDateTime @@ -44,11 +34,8 @@ class TiltakEventProcessorTest : FunSpec({ avtaler = AvtaleRepository(database.db), ) - fun createProcessor(engine: HttpClientEngine = MockEngine { respondOk() }): TiltakEventProcessor { - val client = MulighetsrommetApiClient(engine, baseUri = "api") { - "Bearer token" - } - return TiltakEventProcessor(entities, client) + fun createProcessor(): TiltakEventProcessor { + return TiltakEventProcessor(entities) } fun prepareEvent(event: ArenaEvent): Pair { @@ -106,45 +93,5 @@ class TiltakEventProcessorTest : FunSpec({ .value("henvisningsbrev_og_hovedbrev_til_arbeidsgiver").isFalse .value("kopibrev_og_hovedbrev_til_arbeidsgiver").isFalse } - - test("should call api with mapped event payload") { - val engine = MockEngine { respondOk() } - val processor = createProcessor(engine) - - val (event, mapping) = prepareEvent(createArenaTiltakEvent(Insert)) - - processor.handleEvent(event).shouldBeRight() - - engine.requestHistory.last().apply { - method shouldBe HttpMethod.Put - - decodeRequestBody().apply { - id shouldBe mapping.entityId - navn shouldBe "Oppfølging" - rettPaaTiltakspenger shouldBe true - } - } - - processor.handleEvent(createArenaTiltakEvent(Delete)).shouldBeRight() - - engine.requestHistory.last().apply { - method shouldBe HttpMethod.Delete - - url.getLastPathParameterAsUUID() shouldBe mapping.entityId - } - } - - test("should treat a 500 response as error") { - val engine = MockEngine { - respondError(HttpStatusCode.InternalServerError) - } - val processor = createProcessor(engine) - - val (event) = prepareEvent(createArenaTiltakEvent(Insert)) - processor.handleEvent(event).shouldBeLeft().should { - it.status shouldBe Failed - it.message shouldContain "Internal Server Error" - } - } } })