Skip to content

Commit

Permalink
Merge pull request #631 from navikt/startet-begrunnelse-kafka
Browse files Browse the repository at this point in the history
Legg til startet-begrunnelse på pto.oppfolgingsperiode-v1
  • Loading branch information
tu55eladd authored Apr 25, 2024
2 parents 78d95b9 + d376c3b commit a5b2a0c
Show file tree
Hide file tree
Showing 16 changed files with 82 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import no.nav.common.types.identer.AktorId;
import no.nav.pto_schema.enums.arena.Formidlingsgruppe;
import no.nav.veilarboppfolging.controller.request.Innsatsgruppe;
import no.nav.veilarboppfolging.controller.request.SykmeldtBrukerType;
import no.nav.veilarboppfolging.repository.entity.OppfolgingStartBegrunnelse;
Expand Down Expand Up @@ -33,8 +34,9 @@ public static Oppfolgingsbruker arbeidssokerOppfolgingsBruker(AktorId aktorId, I
return new Arbeissoker(aktorId, OppfolgingStartBegrunnelse.ARBEIDSSOKER_REGISTRERING, innsatsgruppe);
}

public static Oppfolgingsbruker arenaSyncOppfolgingBruker(AktorId aktorId) {
return new Oppfolgingsbruker(aktorId.get(), OppfolgingStartBegrunnelse.ARENA_SYNC);
public static Oppfolgingsbruker arenaSyncOppfolgingBruker(AktorId aktorId, Formidlingsgruppe formidlingsgruppe) {
if (formidlingsgruppe == Formidlingsgruppe.ISERV) throw new IllegalStateException("ISERV skal ikke starte oppfølging");
return new Oppfolgingsbruker(aktorId.get(), formidlingsgruppe == Formidlingsgruppe.IARBS ? OppfolgingStartBegrunnelse.ARENA_SYNC_IARBS : OppfolgingStartBegrunnelse.ARENA_SYNC_ARBS);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import no.nav.common.types.identer.AktorId;
import no.nav.veilarboppfolging.repository.entity.OppfolgingStartBegrunnelse;
import no.nav.veilarboppfolging.repository.entity.OppfolgingsperiodeEntity;
import no.nav.veilarboppfolging.utils.EnumUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
Expand All @@ -27,7 +28,7 @@ public class OppfolgingsPeriodeRepository {
private final TransactionTemplate transactor;

private final static String hentOppfolingsperioderSQL =
"SELECT uuid, aktor_id, avslutt_veileder, startdato, sluttdato, avslutt_begrunnelse " +
"SELECT uuid, aktor_id, avslutt_veileder, startdato, sluttdato, avslutt_begrunnelse, start_begrunnelse " +
"FROM OPPFOLGINGSPERIODE ";

@Autowired
Expand Down Expand Up @@ -137,6 +138,7 @@ private static OppfolgingsperiodeEntity mapTilOppfolgingsperiode(ResultSet resul
.startDato(hentZonedDateTime(result, "startdato"))
.sluttDato(hentZonedDateTime(result, "sluttdato"))
.begrunnelse(result.getString("avslutt_begrunnelse"))
.startetBegrunnelse(EnumUtils.valueOf(OppfolgingStartBegrunnelse.class, result.getString("start_begrunnelse")))
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
package no.nav.veilarboppfolging.repository.entity;

import no.nav.veilarboppfolging.kafka.dto.StartetBegrunnelseDTO;

public enum OppfolgingStartBegrunnelse {
ARBEIDSSOKER_REGISTRERING,
REAKTIVERT,
SYKMELDT_MER_OPPFOLGING,
ARENA_SYNC,
ARENA_SYNC, // TODO: Fjerne etter opprydding i databasen
ARENA_SYNC_ARBS,
ARENA_SYNC_IARBS;

public StartetBegrunnelseDTO toStartetBegrunnelseDTO() {
if (this == ARBEIDSSOKER_REGISTRERING || this == ARENA_SYNC_ARBS) {
return StartetBegrunnelseDTO.ARBEIDSSOKER;
} else { // Reativer er sykmeldt fordi arbeidsøkere automatisk er under oppfølging
return StartetBegrunnelseDTO.SYKEMELDT_MER_OPPFOLGING;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ public class OppfolgingsperiodeEntity {
ZonedDateTime sluttDato;
String begrunnelse;
List<KvpPeriodeEntity> kvpPerioder;
OppfolgingStartBegrunnelse startetBegrunnelse;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,20 @@

import no.nav.common.auth.context.AuthContextHolder;
import no.nav.common.kafka.producer.feilhandtering.KafkaProducerRecordStorage;
import no.nav.common.kafka.producer.serializer.JsonValidationSerializer;
import no.nav.common.types.identer.AktorId;
import no.nav.pto_schema.kafka.json.topic.SisteOppfolgingsperiodeV1;
import no.nav.pto_schema.kafka.json.topic.SisteTilordnetVeilederV1;
import no.nav.pto_schema.kafka.json.topic.onprem.*;
import no.nav.veilarboppfolging.config.KafkaProperties;
import no.nav.veilarboppfolging.kafka.KvpPeriode;
import no.nav.veilarboppfolging.kafka.dto.OppfolgingsperiodeDTO;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.Serializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.ZonedDateTime;

import static no.nav.common.kafka.producer.util.ProducerUtils.serializeJsonRecord;
import static no.nav.pto_schema.kafka.json.JsonSchemaLocator.getKafkaSchema;

@Service
public class KafkaProducerService {
Expand All @@ -28,9 +26,6 @@ public class KafkaProducerService {

private final KafkaProperties kafkaProperties;

private final Serializer<SisteOppfolgingsperiodeV1> sisteOppfolgingsperiodeV1Serializer
= new JsonValidationSerializer<>(getKafkaSchema(SisteOppfolgingsperiodeV1.class));

@Autowired
public KafkaProducerService(
AuthContextHolder authContextHolder,
Expand All @@ -42,9 +37,9 @@ public KafkaProducerService(
this.kafkaProperties = kafkaProperties;
}

public void publiserOppfolgingsperiode(SisteOppfolgingsperiodeV1 sisteOppfolgingsperiodeV1) {
sisteOppfolgingsPeriode(sisteOppfolgingsperiodeV1);
oppfolingsperiode(sisteOppfolgingsperiodeV1);
public void publiserOppfolgingsperiode(OppfolgingsperiodeDTO oppfolgingsperiode) {
sisteOppfolgingsPeriode(oppfolgingsperiode.toSisteOppfolgingsperiodeDTO());
oppfolingsperiode(oppfolgingsperiode);
}

private void sisteOppfolgingsPeriode(SisteOppfolgingsperiodeV1 sisteOppfolgingsperiodeV1) {
Expand All @@ -53,7 +48,7 @@ private void sisteOppfolgingsPeriode(SisteOppfolgingsperiodeV1 sisteOppfolgingsp
sisteOppfolgingsperiodeV1);
}

private void oppfolingsperiode(SisteOppfolgingsperiodeV1 sisteOppfolgingsperiodeV1) {
private void oppfolingsperiode(OppfolgingsperiodeDTO sisteOppfolgingsperiodeV1) {
store(kafkaProperties.getOppfolgingsperiodeTopic(),
sisteOppfolgingsperiodeV1.getAktorId(),
sisteOppfolgingsperiodeV1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.common.types.identer.AktorId;
import no.nav.pto_schema.kafka.json.topic.SisteOppfolgingsperiodeV1;
import no.nav.veilarboppfolging.kafka.KvpPeriode;
import no.nav.veilarboppfolging.kafka.dto.OppfolgingsperiodeDTO;
import no.nav.veilarboppfolging.repository.KvpRepository;
import no.nav.veilarboppfolging.repository.OppfolgingsPeriodeRepository;
import no.nav.veilarboppfolging.repository.OppfolgingsStatusRepository;
Expand Down Expand Up @@ -122,9 +122,9 @@ public void republiserOppfolgingsperiodeForBruker(AktorId aktorId) {
return;
}

SisteOppfolgingsperiodeV1 sisteOppfolgingsperiodeV1 = DtoMappers.tilSisteOppfolgingsperiodeV1(sistePeriode);
OppfolgingsperiodeDTO periodeDTO = DtoMappers.tilOppfolgingsperiodeDTO(sistePeriode);

kafkaProducerService.publiserOppfolgingsperiode(sisteOppfolgingsperiodeV1);
kafkaProducerService.publiserOppfolgingsperiode(periodeDTO);
}

private void republiserSisteTilordnetVeilederForBruker(AktorId aktorId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public void oppdaterOppfolgingMedStatusFraArena(EndringPaaOppfoelgingsBrukerV2 b

if (!erBrukerUnderOppfolging && erUnderOppfolgingIArena) {
secureLog.info("Starter oppfølging på bruker som er under oppfølging i Arena, men ikke i veilarboppfolging. aktorId={}", aktorId);
oppfolgingService.startOppfolgingHvisIkkeAlleredeStartet(Oppfolgingsbruker.arenaSyncOppfolgingBruker(aktorId));
oppfolgingService.startOppfolgingHvisIkkeAlleredeStartet(Oppfolgingsbruker.arenaSyncOppfolgingBruker(aktorId, formidlingsgruppe));
} else if (erBrukerUnderOppfolging && !erUnderOppfolgingIArena && erInaktivIArena) {
Optional<ArenaOppfolgingTilstand> maybeArenaTilstand = arenaOppfolgingService.hentOppfolgingTilstandDirekteFraArena(fnr);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ public void startOppfolgingHvisIkkeAlleredeStartet(Oppfolgingsbruker oppfolgings
OppfolgingsperiodeEntity sistePeriode = OppfolgingsperiodeUtils.hentSisteOppfolgingsperiode(perioder);

log.info("Oppfølgingsperiode startet for bruker - publiserer endringer på oppfølgingsperiode-topics.");
kafkaProducerService.publiserOppfolgingsperiode(DtoMappers.tilSisteOppfolgingsperiodeV1(sistePeriode));
kafkaProducerService.publiserOppfolgingsperiode(DtoMappers.tilOppfolgingsperiodeDTO(sistePeriode));

if (kontaktinfo.isReservert()) {
manuellStatusService.settBrukerTilManuellGrunnetReservertIKRR(aktorId);
Expand Down Expand Up @@ -321,7 +321,7 @@ public void avsluttOppfolgingForBruker(AktorId aktorId, String veilederId, Strin
OppfolgingsperiodeEntity sistePeriode = OppfolgingsperiodeUtils.hentSisteOppfolgingsperiode(perioder);

log.info("Oppfølgingsperiode avsluttet for bruker - publiserer endringer på oppfølgingsperiode-topics.");
kafkaProducerService.publiserOppfolgingsperiode(DtoMappers.tilSisteOppfolgingsperiodeV1(sistePeriode));
kafkaProducerService.publiserOppfolgingsperiode(DtoMappers.tilOppfolgingsperiodeDTO(sistePeriode));

// Publiserer også endringer som resettes i oppfolgingsstatus-tabellen ved avslutting av oppfølging
kafkaProducerService.publiserVeilederTilordnet(aktorId, null);
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/no/nav/veilarboppfolging/utils/DtoMappers.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import no.nav.veilarboppfolging.controller.response.*;
import no.nav.veilarboppfolging.domain.AvslutningStatusData;
import no.nav.veilarboppfolging.domain.OppfolgingStatusData;
import no.nav.veilarboppfolging.kafka.dto.OppfolgingsperiodeDTO;
import no.nav.veilarboppfolging.repository.entity.KvpPeriodeEntity;
import no.nav.veilarboppfolging.repository.entity.MaalEntity;
import no.nav.veilarboppfolging.repository.entity.OppfolgingsperiodeEntity;
Expand Down Expand Up @@ -121,6 +122,16 @@ public static SisteOppfolgingsperiodeV1 tilSisteOppfolgingsperiodeV1(Oppfolgings
);
}

public static OppfolgingsperiodeDTO tilOppfolgingsperiodeDTO(OppfolgingsperiodeEntity oppfolgingsperiode) {
return new OppfolgingsperiodeDTO(
oppfolgingsperiode.getUuid().toString(),
oppfolgingsperiode.getStartDato(),
oppfolgingsperiode.getSluttDato(),
oppfolgingsperiode.getAktorId(),
oppfolgingsperiode.getStartetBegrunnelse().toStartetBegrunnelseDTO()
);
}

public static OppfolgingPeriodeMinimalDTO tilOppfolgingPeriodeMinimalDTO(OppfolgingsperiodeEntity oppfolgingsperiode) {
return new OppfolgingPeriodeMinimalDTO()
.setUuid(oppfolgingsperiode.getUuid())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package no.nav.veilarboppfolging.kafka.dto

import no.nav.pto_schema.kafka.json.topic.SisteOppfolgingsperiodeV1
import java.time.ZonedDateTime
import java.util.*

data class OppfolgingsperiodeDTO(
val uuid: String,
val startDato: ZonedDateTime,
val sluttDato: ZonedDateTime?,
val aktorId: String,
val startetBegrunnelse: StartetBegrunnelseDTO
) {
fun toSisteOppfolgingsperiodeDTO(): SisteOppfolgingsperiodeV1 {
return SisteOppfolgingsperiodeV1(
UUID.fromString(uuid),
aktorId,
startDato,
sluttDato,
)
}
}

enum class StartetBegrunnelseDTO {
ARBEIDSSOKER,
SYKEMELDT_MER_OPPFOLGING
}

5 changes: 5 additions & 0 deletions src/main/resources/schemas/oppfolgingsperiode.v1.schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@ properties:
format: date-time
aktorId:
type: string
startet_begrunnelse:
type: string
enum:
- ARBEIDSSOKER
- SYKEMELDT_MER_OPPFOLGING
4 changes: 2 additions & 2 deletions src/main/resources/schemas/veilarboppfolging.asyncapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ operations:
$ref: "#/channels/kvp-perioder-v1"
messages:
- $ref: "#/channels/kvp-perioder-v1/messages/kvpperiode"
oppfolgingsperiodeCompacted:
siste-oppfolgingsperiode-v1:
description: Oppfølgingsperiode compacted på aktørId (bare siste periode)
action: send
channel:
Expand Down Expand Up @@ -84,4 +84,4 @@ components:
title: Oppfølgingsbruker fra veilarbarena
summary: Oppfølgings-status på en bruker fra Arena
payload:
$ref: oppfolgingsbruker.v1.scheam.yml
$ref: oppfolgingsbruker.v1.schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import no.nav.veilarboppfolging.service.AuthService;
import no.nav.veilarboppfolging.service.KafkaRepubliseringService;
import no.nav.veilarboppfolging.service.ManuellStatusService;
import no.nav.veilarboppfolging.utils.auth.AuthorizationInterceptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void oppdaterOppfolgingMedStatusFraArena__skal_starte_oppfolging_pa_bruke

oppfolgingEndringService.oppdaterOppfolgingMedStatusFraArena(brukverV2);

verify(oppfolgingService, times(1)).startOppfolgingHvisIkkeAlleredeStartet(Oppfolgingsbruker.arenaSyncOppfolgingBruker(TEST_AKTOR_ID));
verify(oppfolgingService, times(1)).startOppfolgingHvisIkkeAlleredeStartet(Oppfolgingsbruker.arenaSyncOppfolgingBruker(TEST_AKTOR_ID, Formidlingsgruppe.ARBS));
verify(oppfolgingService, never()).avsluttOppfolgingForBruker(any(), any(), any());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import no.nav.veilarboppfolging.domain.AvslutningStatusData;
import no.nav.veilarboppfolging.domain.OppfolgingStatusData;
import no.nav.veilarboppfolging.domain.Oppfolgingsbruker;
import no.nav.veilarboppfolging.kafka.dto.OppfolgingsperiodeDTO;
import no.nav.veilarboppfolging.repository.KvpRepository;
import no.nav.veilarboppfolging.repository.OppfolgingsPeriodeRepository;
import no.nav.veilarboppfolging.repository.OppfolgingsStatusRepository;
Expand Down Expand Up @@ -115,7 +116,7 @@ public void skal_publisere_paa_kafka_ved_start_paa_oppfolging() {

List<OppfolgingsperiodeEntity> oppfolgingsperioder = oppfolgingsPeriodeRepository.hentOppfolgingsperioder(AKTOR_ID);
assertEquals(1, oppfolgingsperioder.size());
verify(kafkaProducerService, times(1)).publiserOppfolgingsperiode(any(SisteOppfolgingsperiodeV1.class));
verify(kafkaProducerService, times(1)).publiserOppfolgingsperiode(any(OppfolgingsperiodeDTO.class));
}

@Test
Expand All @@ -131,7 +132,7 @@ public void skal_publisere_paa_kafka_ved_avsluttet_oppfolging() {
reset(kafkaProducerService);
oppfolgingService.avsluttOppfolging(FNR, VEILEDER, "");

verify(kafkaProducerService).publiserOppfolgingsperiode(any(SisteOppfolgingsperiodeV1.class));
verify(kafkaProducerService).publiserOppfolgingsperiode(any(OppfolgingsperiodeDTO.class));
verify(kafkaProducerService).publiserVeilederTilordnet(AKTOR_ID, null);
verify(kafkaProducerService).publiserEndringPaNyForVeileder(AKTOR_ID, false);
verify(kafkaProducerService).publiserEndringPaManuellStatus(AKTOR_ID, false);
Expand Down

0 comments on commit a5b2a0c

Please sign in to comment.