Skip to content

Commit

Permalink
Merge pull request #1643 from navikt/dev
Browse files Browse the repository at this point in the history
Prodsette: Swagger-doc
  • Loading branch information
Mathiamu authored Jul 9, 2024
2 parents f1c1de1 + 09dd682 commit 844012a
Show file tree
Hide file tree
Showing 13 changed files with 117 additions and 1 deletion.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
![](https://github.com/navikt/veilarbportefolje/workflows/Build,%20push%20and%20deploy/badge.svg)

# Beskrivelse
# veilarbportefolje

## Beskrivelse

Tjeneste som aggregerer data fra andre baksystemer og håndterer oppdatering av søkeindeks brukt i modia oversikten.

Expand All @@ -16,6 +18,10 @@ Følgende data aggregeres:
* Informasjon om delt cv fra arbeidsplassen via Kafka
* Informasjon om endring av mål fra `veilarboppfolging` via Kafka

### Swagger-dokumentasjon

Endepunktene er dokumentert vha. Swagger/OpenAPI. Dokumentasjonen er tilgjengelig på egen sti, som i skrivende stund (08.05.24) er `https://veilarbportefoljeflate.intern.dev.nav.no/veilarbportefolje/internal/swagger-ui/index.html`.

## Hvordan bygge

Kjør `mvn clean install`
Expand Down
11 changes: 11 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,10 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>

Expand Down Expand Up @@ -351,6 +355,13 @@
<version>1.12.2</version>
</dependency>

<!-- Swagger -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.5.0</version>
</dependency>

<!--TEST-->
<dependency>
<groupId>org.junit.vintage</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.admin.v1;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.common.auth.context.AuthContextHolder;
Expand Down Expand Up @@ -33,6 +35,7 @@
@RestController
@RequestMapping("/api/admin")
@RequiredArgsConstructor
@Tag(name = "Admin", description = "Admin-funksjonalitet som ikke er tilgjengelig for vanlige brukere. Funksjonaliteten er kun tilgjengelig for medlemmer av applikasjonens forvaltningsteam.")
public class AdminController {
private final String PTO_ADMIN = new DownstreamApi(EnvironmentUtils.isProduction().orElse(false) ?
"prod-fss" : "dev-fss", "pto", "pto-admin").toString();
Expand All @@ -48,20 +51,23 @@ public class AdminController {
private final PdlService pdlService;

@DeleteMapping("/oppfolgingsbruker")
@Operation(summary = "Fjern bruker", description = "Sletter en bruker og fjerner tilhørende informasjon om brukeren. Brukeren vil ikke lenger eksistere i porteføljene.")
public String slettOppfolgingsbruker(@RequestBody String aktoerId) {
sjekkTilgangTilAdmin();
oppfolgingAvsluttetService.avsluttOppfolging(AktorId.of(aktoerId));
return "Oppfølgingsbruker ble slettet";
}

@PostMapping("/lastInnOppfolging")
@Operation(summary = "Oppdater data for alle brukere", description = "Går gjennom alle brukere i løsningen og oppdaterer oppfølgingsdata om brukere under oppfølging. Brukere som eventuelt ikke er under oppfølging slettes.")
public String lastInnOppfolgingsData() {
sjekkTilgangTilAdmin();
oppfolgingService.lastInnDataPaNytt();
return "Innlastning av oppfolgingsdata har startet";
}

@PostMapping("/lastInnOppfolgingForBruker")
@Operation(summary = "Oppdater data for bruker", description = "Oppdaterer oppfølgingsdata for en gitt bruker. Dersom brukeren eventuelt ikke er under oppfølging slettes den.")
public String lastInnOppfolgingsDataForBruker(@RequestBody String fnr) {
sjekkTilgangTilAdmin();
String aktorId = aktorClient.hentAktorId(Fnr.ofValidFnr(fnr)).get();
Expand All @@ -87,6 +93,7 @@ public String indeksAktoerId(@RequestParam String aktorId) {
}

@PostMapping("/indeks/AlleBrukere")
@Operation(summary = "Indekser alle brukere", description = "Går gjennom alle brukere i løsningen og oppdaterer data om disse i søkemotoren (OpenSearch).")
public String indekserAlleBrukere() {
sjekkTilgangTilAdmin();
return JobRunner.runAsync("Admin_hovedindeksering", () -> {
Expand All @@ -97,6 +104,7 @@ public String indekserAlleBrukere() {
}

@PostMapping("/indeks/AlleBrukereNyIndex")
@Operation(summary = "Indekser alle brukere på ny index", description = "Går gjennom alle brukere i løsningen og oppdaterer data om disse i søkemotoren (OpenSearch) på en ny indeks.")
public String indekserAlleBrukereNyIndex() {
sjekkTilgangTilAdmin();
return JobRunner.runAsync("Admin_hovedindeksering_ny_index", () -> {
Expand All @@ -107,6 +115,7 @@ public String indekserAlleBrukereNyIndex() {
}

@PutMapping("/ytelser/allUsers")
@Operation(summary = "Oppdater ytelser for alle brukere", description = "Går gjennom alle brukere i løsningen og oppdaterer data om ytelser for disse.")
public String syncYtelserForAlle() {
sjekkTilgangTilAdmin();
List<AktorId> brukereUnderOppfolging = oppfolgingRepositoryV2.hentAlleGyldigeBrukereUnderOppfolging();
Expand All @@ -115,13 +124,15 @@ public String syncYtelserForAlle() {
}

@PutMapping("/ytelser/idag")
@Operation(summary = "Oppdater ytelser for alle brukere som har ytelser som starter i dag", description = "Går gjennom alle brukere i løsningen og oppdaterer data om ytelser for disse som starter i dag.")
public String syncYtelserForIDag() {
sjekkTilgangTilAdmin();
ytelsesService.oppdaterBrukereMedYtelserSomStarterIDag();
return "Aktiviteter er nå i sync";
}

@PostMapping("/opensearch/createIndex")
@Operation(summary = "Opprett ny indeks", description = "Oppretter en ny indeks i søkemotoren (OpenSearch).")
public String createIndex() {
sjekkTilgangTilAdmin();
String indexName = opensearchAdminService.opprettNyIndeks();
Expand All @@ -130,45 +141,52 @@ public String createIndex() {
}

@GetMapping("/opensearch/getAliases")
@Operation(summary = "Hent alle aliaser", description = "Henter alle aliaser som eksisterer i søkemotoren (OpenSearch).")
public String getAliases() {
sjekkTilgangTilAdmin();
return opensearchAdminService.hentAliaser();
}

@PostMapping("/opensearch/deleteIndex")
@Operation(summary = "Slett indeks", description = "Sletter en indeks i søkemotoren (OpenSearch).")
public boolean deleteIndex(@RequestParam String indexName) {
sjekkTilgangTilAdmin();
log.info("Sletter index: {}", indexName);
return opensearchAdminService.slettIndex(indexName);
}

@PostMapping("/opensearch/assignAliasToIndex")
@Operation(summary = "Tildel alias til indeks", description = "Tildeler et alias til en indeks i søkemotoren (OpenSearch).")
public String assignAliasToIndex(@RequestParam String indexName) {
sjekkTilgangTilAdmin();
opensearchAdminService.opprettAliasForIndeks(indexName);
return "Ok";
}

@PostMapping("/opensearch/getSettings")
@Operation(summary = "Hent innstillinger for indeks", description = "Henter innstillinger for en indeks i søkemotoren (OpenSearch).")
public String getSettings(@RequestParam String indexName) {
sjekkTilgangTilAdmin();
validerIndexName(indexName);
return opensearchAdminService.getSettingsOnIndex(indexName);
}

@PostMapping("/opensearch/fixReadOnlyMode")
@Operation(summary = "Fjern read only mode", description = "Fjerner read only mode på en indeks i søkemotoren (OpenSearch).")
public String fixReadOnlyMode() {
sjekkTilgangTilAdmin();
return opensearchAdminService.updateFromReadOnlyMode();
}

@PostMapping("/opensearch/forceShardAssignment")
@Operation(summary = "Tving shard assignment", description = "Tvinger shard assignment på en indeks i søkemotoren (OpenSearch).")
public String forceShardAssignment() {
sjekkTilgangTilAdmin();
return opensearchAdminService.forceShardAssignment();
}

@PostMapping("/pdl/lastInnDataFraPdl")
@Operation(summary = "Last inn PDL-data", description = "Henter og lagrer data fra PDL (identer, personalia og foreldreansvar) for alle brukere i løsningen.")
public String lastInnPDLBrukerData() {
sjekkTilgangTilAdmin();
AtomicInteger antall = new AtomicInteger(0);
Expand Down Expand Up @@ -203,6 +221,7 @@ public String lastInnPDLBrukerData(@RequestParam String fnr) {


@PostMapping("/test/postgresIndeksering")
@Operation(summary = "Test indeksering av brukere", description = "Går gjennom alle brukere i løsningen og gjør en dry-run av mapping til datamodell som benyttes av søkemotoren (OpenSearch).")
public void testHentUnderOppfolging() {
sjekkTilgangTilAdmin();
List<AktorId> brukereUnderOppfolging = oppfolgingRepositoryV2.hentAlleGyldigeBrukereUnderOppfolging();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.admin.v2;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.common.auth.context.AuthContextHolder;
Expand All @@ -20,13 +22,15 @@
@RestController
@RequestMapping("/api/v2/admin")
@RequiredArgsConstructor
@Tag(name = "Admin V2", description = "Admin-funksjonalitet V2 som ikke er tilgjengelig for vanlige brukere. Funksjonaliteten er kun tilgjengelig for medlemmer av applikasjonens forvaltningsteam.")
public class AdminV2Controller {
private final String PTO_ADMIN = new DownstreamApi(EnvironmentUtils.isProduction().orElse(false) ?
"prod-fss" : "dev-fss", "pto", "pto-admin").toString();
private final AktorClient aktorClient;
private final OpensearchIndexer opensearchIndexer;
private final AuthContextHolder authContextHolder;

@Operation(summary = "Indekser bruker med fødselsnummer", description = "Hent og skriv oppdatert data for bruker, gitt ved fødselsnummer, til søkemotoren (OpenSearch).")
@PutMapping("/indeks/bruker/fnr")
public String indeks(@RequestBody AdminIndeksBrukerRequest adminIndeksBrukerRequest) {
sjekkTilgangTilAdmin();
Expand All @@ -35,6 +39,7 @@ public String indeks(@RequestBody AdminIndeksBrukerRequest adminIndeksBrukerRequ
return "Indeksering fullfort";
}

@Operation(summary = "Indekser bruker med Aktør-ID", description = "Hent og skriv oppdatert data for bruker, gitt ved Aktør-ID, til søkemotoren (OpenSearch).")
@PutMapping("/indeks/bruker")
public String indeksAktoerId(@RequestBody AdminIndexAktorRequest adminIndexAktorRequest) {
sjekkTilgangTilAdmin();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.arbeidsliste.v1;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.vavr.control.Validation;
import lombok.extern.slf4j.Slf4j;
import no.nav.common.types.identer.AktorId;
Expand Down Expand Up @@ -35,6 +37,7 @@
@Slf4j
@RestController
@RequestMapping("/api/arbeidsliste")
@Tag(name = "Arbeidsliste", description = "Arbeidsliste-funksjonalitet")
public class ArbeidsListeController {
private final ArbeidslisteService arbeidslisteService;
private final BrukerServiceV2 brukerService;
Expand All @@ -54,6 +57,7 @@ public ArbeidsListeController(


@PostMapping
@Operation(summary = "Opprett arbeidslister", description = "Oppretter arbeidslister for et sett med brukere.")
public ResponseEntity opprettArbeidsListe(@RequestBody List<ArbeidslisteRequest> arbeidsliste) {
authService.innloggetVeilederHarTilgangTilOppfolging();
List<String> tilgangErrors = getTilgangErrors(arbeidsliste);
Expand All @@ -75,7 +79,12 @@ public ResponseEntity opprettArbeidsListe(@RequestBody List<ArbeidslisteRequest>
return response.data.isEmpty() ? response.badRequest() : response.created();
}

/**
* @deprecated Skal fjernes høsten 2024 når arbeidslistene slettes.
*/
@GetMapping("{fnr}")
@Deprecated(forRemoval = true)
@Operation(summary = "Hent arbeidsliste", description = "Henter arbeidsliste for en gitt bruker.")
public Arbeidsliste getArbeidsListe(@PathVariable("fnr") String fnrString) {
validerOppfolgingOgBruker(fnrString);

Expand All @@ -97,7 +106,12 @@ public Arbeidsliste getArbeidsListe(@PathVariable("fnr") String fnrString) {
return harVeilederTilgang ? arbeidsliste : emptyArbeidsliste().setHarVeilederTilgang(false);
}

/**
* @deprecated Skal fjernes høsten 2024 når arbeidslistene slettes.
*/
@PostMapping("{fnr}")
@Deprecated(forRemoval = true)
@Operation(summary = "Opprett arbeidsliste", description = "Oppretter en arbeidsliste for en gitt bruker.")
public Arbeidsliste opprettArbeidsListe(@RequestBody ArbeidslisteRequest body, @PathVariable("fnr") String fnr) {
validerOppfolgingOgBruker(fnr);
sjekkTilgangTilEnhet(Fnr.ofValidFnr(fnr));
Expand All @@ -111,7 +125,12 @@ public Arbeidsliste opprettArbeidsListe(@RequestBody ArbeidslisteRequest body, @
.setIsOppfolgendeVeileder(true);
}

/**
* @deprecated Skal fjernes høsten 2024 når arbeidslistene slettes.
*/
@PutMapping("{fnr}")
@Deprecated(forRemoval = true)
@Operation(summary = "Oppdater arbeidsliste", description = "Oppdaterer en arbeidsliste med nye felter for en gitt bruker.")
public Arbeidsliste oppdaterArbeidsListe(@RequestBody ArbeidslisteRequest body, @PathVariable("fnr") String fnrString) {
validerOppfolgingOgBruker(fnrString);
Fnr fnr = Fnr.ofValidFnr(fnrString);
Expand All @@ -137,7 +156,12 @@ public Arbeidsliste oppdaterArbeidsListe(@RequestBody ArbeidslisteRequest body,
AuthUtils.getInnloggetVeilederIdent()));
}

/**
* @deprecated Skal fjernes høsten 2024 når arbeidslistene slettes.
*/
@DeleteMapping("{fnr}")
@Deprecated(forRemoval = true)
@Operation(summary = "Slett arbeidsliste", description = "Sletter en arbeidsliste for en gitt bruker.")
public Arbeidsliste deleteArbeidsliste(@PathVariable("fnr") String fnr) {
validerOppfolgingOgBruker(fnr);
sjekkTilgangTilEnhet(Fnr.ofValidFnr(fnr));
Expand All @@ -156,6 +180,7 @@ public Arbeidsliste deleteArbeidsliste(@PathVariable("fnr") String fnr) {
}

@PostMapping("/delete")
@Operation(summary = "Slett arbeidslister", description = "Sletter arbeidslister for et sett med brukere.")
public RestResponse<String> deleteArbeidslisteListe(@RequestBody java.util.List<ArbeidslisteRequest> arbeidslisteData) {
authService.innloggetVeilederHarTilgangTilOppfolging();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.arbeidsliste.v2;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.vavr.control.Validation;
import lombok.extern.slf4j.Slf4j;
import no.nav.common.types.identer.Fnr;
Expand Down Expand Up @@ -29,6 +31,7 @@
@Slf4j
@RestController
@RequestMapping("/api/v2")
@Tag(name = "Arbeidsliste", description = "Arbeidsliste-funksjonalitet")
public class ArbeidsListeV2Controller {
private final ArbeidslisteService arbeidslisteService;
private final BrukerServiceV2 brukerService;
Expand All @@ -49,6 +52,7 @@ public ArbeidsListeV2Controller(
}

@PostMapping("/hent-arbeidsliste")
@Operation(summary = "Hent arbeidsliste for bruker", description = "Henter arbeidsliste for en gitt bruker.")
public Arbeidsliste getArbeidsListe(@RequestBody ArbeidslisteForBrukerRequest arbeidslisteForBrukerRequest) {
validerOppfolgingOgBruker(arbeidslisteForBrukerRequest.fnr().get());

Expand All @@ -72,6 +76,7 @@ public Arbeidsliste getArbeidsListe(@RequestBody ArbeidslisteForBrukerRequest ar
}

@PostMapping("/arbeidsliste")
@Operation(summary = "Opprett arbeidsliste for bruker", description = "Oppretter en ny arbeidsliste for en gitt bruker.")
public Arbeidsliste opprettArbeidsListe(@RequestBody ArbeidslisteV2Request body) {
validerOppfolgingOgBruker(body.fnr().get());
Fnr gyldigFnr = Fnr.ofValidFnr(body.fnr().get());
Expand All @@ -87,6 +92,7 @@ public Arbeidsliste opprettArbeidsListe(@RequestBody ArbeidslisteV2Request body)
}

@PutMapping("/arbeidsliste")
@Operation(summary = "Oppdater arbeidsliste", description = "Oppdaterer en arbeidsliste med nye felter for en gitt bruker.")
public Arbeidsliste oppdaterArbeidsListe(@RequestBody ArbeidslisteV2Request body) {
validerOppfolgingOgBruker(body.fnr().get());
Fnr fnr = Fnr.ofValidFnr(body.fnr().get());
Expand All @@ -113,6 +119,7 @@ public Arbeidsliste oppdaterArbeidsListe(@RequestBody ArbeidslisteV2Request body
}

@DeleteMapping("/arbeidsliste")
@Operation(summary = "Slett arbeidsliste", description = "Sletter en arbeidsliste for en gitt bruker.")
public Arbeidsliste deleteArbeidsliste(
@RequestBody ArbeidslisteForBrukerRequest arbeidslisteForBrukerRequest,
@RequestParam(value = "slettFargekategori", required = false, defaultValue = "true") Boolean slettFargekategori
Expand Down
Loading

0 comments on commit 844012a

Please sign in to comment.