Skip to content

Commit

Permalink
Merge branch 'main' into vaas/udeltesamtalereferat
Browse files Browse the repository at this point in the history
  • Loading branch information
johatr authored Dec 18, 2024
2 parents c6abff1 + fb119c3 commit 896bef2
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 58 deletions.
10 changes: 4 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ plugins {
id("com.github.davidmc24.gradle.plugin.avro") version "1.9.1"
id("project-report")
id("jacoco")
id("org.sonarqube") version "4.4.1.3373"
id("org.sonarqube") version "6.0.0.5145"
id("org.springframework.boot") version "3.4.0"
kotlin("plugin.lombok") version "2.1.0"
id("io.freefair.lombok") version "8.11"
Expand Down Expand Up @@ -153,7 +153,7 @@ dependencies {
implementation("no.nav.common:util:$common_version")
implementation("no.nav.common:types:$common_version")
implementation("org.apache.commons:commons-collections4:4.4")
implementation("no.nav.tms.varsel:kotlin-builder:2.1.0")
implementation("no.nav.tms.varsel:kotlin-builder:2.1.1")
implementation("no.nav.poao.dab:spring-auth:$dab_common_version")
implementation("no.nav.poao.dab:spring-a2-annotations:$dab_common_version")

Expand All @@ -171,14 +171,12 @@ dependencies {
implementation("org.springframework.kafka:spring-kafka")
implementation("com.squareup.okhttp3:okhttp")
implementation("io.micrometer:micrometer-registry-prometheus-simpleclient")
implementation("org.flywaydb:flyway-database-postgresql:10.15.2")
implementation("org.flywaydb:flyway-database-postgresql:11.0.0")
implementation("org.postgresql:postgresql:42.7.4")
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2")
// Hvis det ønskes swagger doc, foreslås å bruke springdoc (springdoc-openapi-starter-webmvc-ui - se no.nav.fo.veilarbdialog.rest.SwaggerConfig for eksempelconfig)
implementation("io.swagger.core.v3:swagger-annotations:2.2.26")

// BigQuery
implementation(platform("com.google.cloud:libraries-bom:26.50.0"))
implementation(platform("com.google.cloud:libraries-bom:26.51.0"))
implementation("com.google.cloud:google-cloud-bigquery")

implementation("io.getunleash:unleash-client-java:9.2.6")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package no.nav.veilarbaktivitet.aktivitetskort.graphql

import no.nav.common.client.aktoroppslag.AktorOppslagClient
import no.nav.common.types.identer.EnhetId
import no.nav.common.types.identer.Fnr
import no.nav.poao.dab.spring_auth.IAuthService
import no.nav.poao.dab.spring_auth.TilgangsType
import no.nav.veilarbaktivitet.aktivitet.AktivitetAppService
Expand All @@ -13,6 +13,7 @@ import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetDTO
import no.nav.veilarbaktivitet.aktivitet.mappers.AktivitetDTOMapper
import no.nav.veilarbaktivitet.aktivitetskort.MigreringService
import no.nav.veilarbaktivitet.config.ownerProviders.AktivitetOwnerProvider
import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService
import no.nav.veilarbaktivitet.person.Person
import org.springframework.graphql.data.method.annotation.Argument
import org.springframework.graphql.data.method.annotation.QueryMapping
Expand All @@ -30,18 +31,24 @@ class AktivitetskortController(
val ownerProvider: AktivitetOwnerProvider,
val aktivitetService: AktivitetService,
val aktivitetAppService: AktivitetAppService,
val oppfolgingsperiodeService: OppfolgingsperiodeService,
val aktorOppslagClient: AktorOppslagClient,
val authService: IAuthService
) {

@QueryMapping
fun perioder(@Argument fnr: String): List<OppfolgingsPeriode> {
val fnr = getContextUserIdent(fnr)
val eksternBrukerId = Fnr.of(fnr.get())
authService.sjekkTilgangTilPerson(eksternBrukerId, TilgangsType.LESE)
val aktiviteter = getAktiviteter(fnr)
val eksternBrukerId = getContextUserIdent(fnr)
authService.sjekkTilgangTilPerson(eksternBrukerId.otherFnr(), TilgangsType.LESE)
val aktorId = aktorOppslagClient.hentAktorId(eksternBrukerId.otherFnr())
val oppfolgingsPerioder = oppfolgingsperiodeService.hentOppfolgingsPerioder(Person.AktorId(aktorId.get()))
val aktiviteter = getAktiviteter(eksternBrukerId)
.groupBy { it.oppfolgingsperiodeId }
.toList()
.map { OppfolgingsPeriode(it.first, it.second) }
.map { (oppfolgingPeriodeId, aktiviteter) ->
oppfolgingsPerioder.first { it.oppfolgingsperiodeId.equals(oppfolgingPeriodeId) }
.let { OppfolgingsPeriode(oppfolgingPeriodeId, aktiviteter, it.startTid, it.sluttTid) }
}
return aktiviteter
}

Expand Down Expand Up @@ -78,7 +85,7 @@ class AktivitetskortController(
return historikkService.hentHistorikk(listOf(aktivitetId))[aktivitetId]!!
}

private fun getContextUserIdent(fnr: String): Person {
private fun getContextUserIdent(fnr: String): Person.Fnr {
return when {
authService.erEksternBruker() -> Person.fnr(authService.getLoggedInnUser().get())
fnr.isNotBlank() -> Person.fnr(fnr)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package no.nav.veilarbaktivitet.aktivitetskort.graphql

import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetDTO
import java.time.ZonedDateTime
import java.util.*

class OppfolgingsPeriode(
val id: UUID?,
val aktiviteter: List<AktivitetDTO> = emptyList()
val aktiviteter: List<AktivitetDTO> = emptyList(),
val start: ZonedDateTime?,
val slutt: ZonedDateTime?,
)

class Error (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ open class IsPublisertDAO(
join veilarbaktivitet.aktivitet a
on mote.aktivitet_id = a.aktivitet_id and mote.versjon = a.versjon
where mote.referat is not null
and a.til_dato < NOW()
and a.fra_dato < NOW() -- Kun se på møter/samtalereferater som ikke er datert frem i tid
and a.gjeldende = 1 -- Bare siste versjon
and a.historisk_dato is null -- Ikke ta med referat i avsluttede perioder
group by mote.referat_publisert
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,8 @@ class OppfolgingsperiodeService(
fun hentMål(fnr: Fnr): MålDTO {
return oppfolgingClient.hentMål(fnr).orElseGet(null)
}

fun hentOppfolgingsPerioder(aktorId: AktorId): List<Oppfolgingsperiode> {
return oppfolgingsperiodeDAO.getByAktorId(aktorId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,37 @@ import kotlin.math.abs
val log = LoggerFactory.getLogger("no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeUtil")!!


fun finnOppfolgingsperiodeForArenaAktivitet(oppfolgingsperioder: List<Oppfolgingsperiode>, primærDato: LocalDate?): Oppfolgingsperiode? {
return primærDato?.let { oppfolgingsperioder.finnOppfolgingsperiodeForTidspunkt(it.atStartOfDay()) }
fun finnOppfolgingsperiodeForArenaAktivitet(oppfolgingsperioder: List<Oppfolgingsperiode>, aktivitetOppslagsdato: LocalDate?): Oppfolgingsperiode? {
return aktivitetOppslagsdato?.let { oppfolgingsperioder.finnOppfolgingsperiodeForTidspunkt(it.atStartOfDay()) }
}

fun List<Oppfolgingsperiode>.finnOppfolgingsperiodeForTidspunkt(tidspunkt: LocalDateTime): Oppfolgingsperiode? {
fun List<Oppfolgingsperiode>.finnOppfolgingsperiodeForTidspunkt(aktivitetOppslagsdato: LocalDateTime): Oppfolgingsperiode? {
val oppfolgingsperioder = this.sortedByDescending { it.startTid }
if (oppfolgingsperioder.isEmpty()) {
log.info("Arenatiltak finn oppfølgingsperiode - bruker har ingen oppfølgingsperioder - tidspunkt=${tidspunkt}, oppfolgingsperioder=${listOf<OppfolgingPeriodeMinimalDTO>()}")
log.info("Arenatiltak finn oppfølgingsperiode - bruker har ingen oppfølgingsperioder - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${listOf<OppfolgingPeriodeMinimalDTO>()}")
return null
}

val opprettetTidspunktCZDT = tidspunkt.atZone(ZoneId.systemDefault())
val opprettetTidspunktCDT = aktivitetOppslagsdato.atZone(ZoneId.systemDefault())

val match = oppfolgingsperioder
.firstOrNull { oppfolgingsperiode -> oppfolgingsperiode.erInnenforPeriode(opprettetTidspunktCZDT) }
.firstOrNull { oppfolgingsperiode -> oppfolgingsperiode.erInnenforPeriode(opprettetTidspunktCDT) }
?: oppfolgingsperioder
.filterIndexed { index, oppfolgingsperiode ->
val forrigePeriode = oppfolgingsperioder.getOrNull(index + 1)
val startetEtterAtForrigePeriodeBleAvsluttet = forrigePeriode?.sluttTid?.let { opprettetTidspunktCZDT.isAfter(it) } ?: false
val startetRettFørDennePeriodenBleStartet = oppfolgingsperiode.erInnenforMedEkstraSlack(opprettetTidspunktCZDT)
startetEtterAtForrigePeriodeBleAvsluttet || startetRettFørDennePeriodenBleStartet
val aktivitetStartetEtterAtForrigePeriodeBleAvsluttet = forrigePeriode?.sluttTid?.let { opprettetTidspunktCDT.isAfter(it) } ?: false
val aktivitetStartetRettFørDennePeriodenBleStartet = oppfolgingsperiode.erInnenforMedEkstraSlack(opprettetTidspunktCDT)
aktivitetStartetEtterAtForrigePeriodeBleAvsluttet || aktivitetStartetRettFørDennePeriodenBleStartet
}
.minByOrNull { abs(ChronoUnit.MILLIS.between(opprettetTidspunktCZDT, it.startTid)) }
.minByOrNull { abs(ChronoUnit.MILLIS.between(opprettetTidspunktCDT, it.startTid)) }
?.also { _ ->
log.info("Arenatiltak finn oppfølgingsperiode - valgt oppfølgingsperiode som startet etter opprettetdato) - tidspunkt=${tidspunkt}, oppfolgingsperioder=${oppfolgingsperioder}")
log.info("Arenatiltak finn oppfølgingsperiode - valgt oppfølgingsperiode som startet etter opprettetdato) - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${oppfolgingsperioder}")
}

return if (match != null) {
match
} else {
log.info("Arenatiltak finn oppfølgingsperiode - opprettetTidspunkt har ingen god match på oppfølgingsperioder) - tidspunkt=${tidspunkt}, oppfolgingsperioder=${oppfolgingsperioder}")
log.info("Arenatiltak finn oppfølgingsperiode - opprettetTidspunkt har ingen god match på oppfølgingsperioder) - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${oppfolgingsperioder}")
null
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import no.nav.veilarbaktivitet.config.kafka.kafkatemplates.KafkaJsonTemplate;
import no.nav.veilarbaktivitet.db.DbTestUtils;
import no.nav.veilarbaktivitet.mock_nav_modell.NavMockService;
import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService;
import no.nav.veilarbaktivitet.stilling_fra_nav.RekrutteringsbistandStatusoppdatering;
import no.nav.veilarbaktivitet.stilling_fra_nav.StillingFraNavTestService;
import no.nav.veilarbaktivitet.util.AktivitetTestService;
Expand Down Expand Up @@ -68,6 +69,9 @@ private static WireMockServer getWireMockServer() {
@Autowired
protected NavMockService navMockService;

@Autowired
protected OppfolgingsperiodeService oppfolgingsperiodeService;

@Value("${topic.inn.aktivitetskort}")
private String aktivitetskortTopic;

Expand All @@ -83,7 +87,7 @@ public void setup() {
DbTestUtils.cleanupTestDb(jdbcTemplate);
JdbcTemplateLockProvider l = (JdbcTemplateLockProvider) lockProvider;
l.clearCache();
aktivitetTestService = new AktivitetTestService(stillingFraNavTestService, port, innRekrutteringsbistandStatusoppdateringTopic, kafkaTestService, stringStringKafkaTemplate, navCommonKafkaJsonTemplate, aktivitetskortTopic);
aktivitetTestService = new AktivitetTestService(stillingFraNavTestService, port, innRekrutteringsbistandStatusoppdateringTopic, kafkaTestService, stringStringKafkaTemplate, navCommonKafkaJsonTemplate, aktivitetskortTopic, oppfolgingsperiodeService);
}

@DynamicPropertySource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,19 +104,24 @@ void hentAktivitetVersjoner_returnererIkkeForhaandsorientering() {

@Test
void hentAktivitetsplan_henterAktiviteterMedForhaandsorientering() {
AktivitetData aktivitetDataMedForhaandsorientering = aktivitetDAO.opprettNyAktivitet(nyttStillingssok().withAktorId(mockBruker.getAktorId()));
AktivitetData aktivitetDataUtenForhaandsorientering = aktivitetDAO.opprettNyAktivitet(nyttStillingssok().withAktorId(mockBruker.getAktorId()));
AktivitetData aktivitetDataMedForhaandsorientering = aktivitetDAO.opprettNyAktivitet(
nyttStillingssok().withAktorId(mockBruker.getAktorId()).withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId()));
AktivitetData aktivitetDataUtenForhaandsorientering = aktivitetDAO.opprettNyAktivitet(
nyttStillingssok().withAktorId(mockBruker.getAktorId()).withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId()));

var fho = ForhaandsorienteringDTO.builder().tekst("fho tekst").type(Type.SEND_FORHAANDSORIENTERING).build();
avtaltMedNavService.opprettFHO(new AvtaltMedNavDTO().setAktivitetVersjon(aktivitetDataMedForhaandsorientering.getVersjon()).setForhaandsorientering(fho), aktivitetDataMedForhaandsorientering.getId(), mockBruker.getAktorId(), NavIdent.of("V123"));
var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder);
assertNotNull(resultat.getAktiviteter().stream().filter(aktivitet -> Objects.equals(aktivitet.getId(), aktivitetDataMedForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering());
assertNull(resultat.getAktiviteter().stream().filter(aktivitet -> Objects.equals(aktivitet.getId(), aktivitetDataUtenForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering());
var aktiviteter = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder).getAktiviteter();
assertNotNull(aktiviteter.stream().filter(aktivitet ->
Objects.equals(aktivitet.getId(), aktivitetDataMedForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering());
assertNull(aktiviteter.stream().filter(aktivitet ->
Objects.equals(aktivitet.getId(), aktivitetDataUtenForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering());
}

@Test
void hentAktivitetsplan_henterStillingFraNavDataUtenCVData() {
var aktivitet = nyStillingFraNav().withAktorId(mockBruker.getAktorId());
var aktivitet = nyStillingFraNav().withAktorId(mockBruker.getAktorId())
.withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId());
AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet);

var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder);
Expand All @@ -128,7 +133,8 @@ void hentAktivitetsplan_henterStillingFraNavDataUtenCVData() {

@Test
void hentAktivitetsplan_henterStillingFraNavDataMedCVData() {
var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId());
var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId())
.withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId());
AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet);

var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder);
Expand All @@ -141,7 +147,8 @@ void hentAktivitetsplan_henterStillingFraNavDataMedCVData() {

@Test
void hentAktivitetsplan_henterStillingFraNavDataMedCvSvar() {
var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId());
var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId())
.withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId());
AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet);

var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import no.nav.veilarbaktivitet.aktivitetskort.bestilling.KasseringsBestilling;
import no.nav.veilarbaktivitet.aktivitetskort.dto.KafkaAktivitetskortWrapperDTO;
import no.nav.veilarbaktivitet.aktivitetskort.graphql.GraphqlResult;
import no.nav.veilarbaktivitet.aktivitetskort.graphql.QueryAktivitetsPerioder;
import no.nav.veilarbaktivitet.arena.ArenaController;
import no.nav.veilarbaktivitet.arena.model.ArenaAktivitetDTO;
import no.nav.veilarbaktivitet.arena.model.ArenaId;
Expand All @@ -30,6 +31,8 @@
import no.nav.veilarbaktivitet.mock_nav_modell.MockBruker;
import no.nav.veilarbaktivitet.mock_nav_modell.MockVeileder;
import no.nav.veilarbaktivitet.mock_nav_modell.RestassuredUser;
import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService;
import no.nav.veilarbaktivitet.oppfolging.periode.SisteOppfolgingsperiodeV1;
import no.nav.veilarbaktivitet.person.Person;
import no.nav.veilarbaktivitet.stilling_fra_nav.KontaktpersonData;
import no.nav.veilarbaktivitet.stilling_fra_nav.RekrutteringsbistandStatusoppdatering;
Expand Down Expand Up @@ -65,16 +68,12 @@
public class AktivitetTestService {
private final StillingFraNavTestService stillingFraNavTestService;
private final int port;

private final String innRekrutteringsbistandStatusoppdateringTopic;

private final KafkaTestService kafkaTestService;

private final KafkaTemplate<String, String> stringStringKafkaTemplate;

private final KafkaJsonTemplate<RekrutteringsbistandStatusoppdatering> rekrutteringsbistandStatusoppdateringProducer;

private final String aktivitetsKortV1Topic;
private final OppfolgingsperiodeService oppfolgingsperiodeService;

/**
* Henter alle aktiviteter for et fnr via aktivitet-apiet.
Expand All @@ -87,10 +86,13 @@ public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker) {
}

public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker, RestassuredUser user) {
List<AktivitetDTO> aktiviteter = queryAktivitetskort(mockBruker, user, DefaultGraphqlQuery.INSTANCE.getQuery())
.getData().getPerioder()
.stream().flatMap(periode -> periode.getAktiviteter().stream())
.toList();
List<AktivitetDTO> aktiviteter = Optional.ofNullable(queryAktivitetskort(mockBruker, user, DefaultGraphqlQuery.INSTANCE.getQuery())
.getData())
.map(QueryAktivitetsPerioder::getPerioder)
.map(perioder -> perioder.stream()
.flatMap(periode -> periode.getAktiviteter().stream())
.toList())
.orElse(List.of());
return new AktivitetsplanDTO().setAktiviteter(aktiviteter);
}

Expand Down Expand Up @@ -593,4 +595,9 @@ public AktivitetDTO hentAktivitetByFunksjonellId(MockBruker mockBruker, MockVeil
.filter((a) -> Objects.equals(a.getFunksjonellId(), funksjonellId))
.findFirst().orElseThrow(() -> new IllegalStateException("Fant ikke aktivitet med funksjonellId %s".formatted(funksjonellId)));
}

/* Mockbruker har allerede periode, brukes til å upserte gamle perioder */
public void upsertOppfolgingsperiode(SisteOppfolgingsperiodeV1 sistePeriode) {
oppfolgingsperiodeService.upsertOppfolgingsperiode(sistePeriode);
}
}
Loading

0 comments on commit 896bef2

Please sign in to comment.