diff --git a/README.md b/README.md
index e6446b1e70..574d4981c8 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@

-# Beskrivelse
+# veilarbportefolje
+
+## Beskrivelse
Tjeneste som aggregerer data fra andre baksystemer og håndterer oppdatering av søkeindeks brukt i modia oversikten.
@@ -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`
diff --git a/pom.xml b/pom.xml
index 835cc36fe6..862771c457 100644
--- a/pom.xml
+++ b/pom.xml
@@ -196,6 +196,10 @@
org.slf4j
slf4j-log4j12
+
+ io.swagger.core.v3
+ swagger-annotations
+
@@ -351,6 +355,13 @@
1.12.2
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
org.junit.vintage
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/admin/v1/AdminController.java b/src/main/java/no/nav/pto/veilarbportefolje/admin/v1/AdminController.java
index 472e21d610..b46618b550 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/admin/v1/AdminController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/admin/v1/AdminController.java
@@ -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;
@@ -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();
@@ -48,6 +51,7 @@ 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));
@@ -55,6 +59,7 @@ public String slettOppfolgingsbruker(@RequestBody String aktoerId) {
}
@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();
@@ -62,6 +67,7 @@ public String lastInnOppfolgingsData() {
}
@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();
@@ -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", () -> {
@@ -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", () -> {
@@ -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 brukereUnderOppfolging = oppfolgingRepositoryV2.hentAlleGyldigeBrukereUnderOppfolging();
@@ -115,6 +124,7 @@ 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();
@@ -122,6 +132,7 @@ public String syncYtelserForIDag() {
}
@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();
@@ -130,12 +141,14 @@ 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);
@@ -143,6 +156,7 @@ public boolean deleteIndex(@RequestParam String 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);
@@ -150,6 +164,7 @@ public String assignAliasToIndex(@RequestParam String indexName) {
}
@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);
@@ -157,18 +172,21 @@ public String getSettings(@RequestParam String 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);
@@ -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 brukereUnderOppfolging = oppfolgingRepositoryV2.hentAlleGyldigeBrukereUnderOppfolging();
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/admin/v2/AdminV2Controller.java b/src/main/java/no/nav/pto/veilarbportefolje/admin/v2/AdminV2Controller.java
index 41cfaa4cad..71cf57b7ef 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/admin/v2/AdminV2Controller.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/admin/v2/AdminV2Controller.java
@@ -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;
@@ -20,6 +22,7 @@
@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();
@@ -27,6 +30,7 @@ public class AdminV2Controller {
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();
@@ -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();
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v1/ArbeidsListeController.java b/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v1/ArbeidsListeController.java
index 50cb54730c..17d5f61287 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v1/ArbeidsListeController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v1/ArbeidsListeController.java
@@ -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;
@@ -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;
@@ -54,6 +57,7 @@ public ArbeidsListeController(
@PostMapping
+ @Operation(summary = "Opprett arbeidslister", description = "Oppretter arbeidslister for et sett med brukere.")
public ResponseEntity opprettArbeidsListe(@RequestBody List arbeidsliste) {
authService.innloggetVeilederHarTilgangTilOppfolging();
List tilgangErrors = getTilgangErrors(arbeidsliste);
@@ -75,7 +79,12 @@ public ResponseEntity opprettArbeidsListe(@RequestBody List
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);
@@ -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));
@@ -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);
@@ -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));
@@ -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 deleteArbeidslisteListe(@RequestBody java.util.List arbeidslisteData) {
authService.innloggetVeilederHarTilgangTilOppfolging();
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v2/ArbeidsListeV2Controller.java b/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v2/ArbeidsListeV2Controller.java
index fb811f4185..6d952e83cb 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v2/ArbeidsListeV2Controller.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/arbeidsliste/v2/ArbeidsListeV2Controller.java
@@ -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;
@@ -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;
@@ -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());
@@ -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());
@@ -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());
@@ -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
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/controller/EnhetController.java b/src/main/java/no/nav/pto/veilarbportefolje/controller/EnhetController.java
index f00bcacd84..6122d47a8d 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/controller/EnhetController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/controller/EnhetController.java
@@ -2,6 +2,8 @@
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import no.nav.common.types.identer.EnhetId;
import no.nav.pto.veilarbportefolje.arenapakafka.aktiviteter.TiltakService;
@@ -25,6 +27,7 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/enhet")
+@Tag(name = "Enhet", description = "Portefølje-funksjonalitet på enhetsnivå.")
public class EnhetController {
private final OpensearchService opensearchService;
private final AuthService authService;
@@ -48,6 +51,7 @@ public class EnhetController {
.build();
@PostMapping("/{enhet}/portefolje")
+ @Operation(summary = "Hent portefølje for enhet", description = "Henter en liste med brukere under oppfølging knyttet til enheten.")
public Portefolje hentPortefoljeForEnhet(
@PathVariable("enhet") String enhet,
@RequestParam(value = "fra", required = false) Integer fra,
@@ -72,6 +76,7 @@ public Portefolje hentPortefoljeForEnhet(
}
@GetMapping("/{enhet}/portefoljestorrelser")
+ @Operation(summary = "Hent porteføljestørrelser for enhet", description = "Henter antall brukere i porteføljen til hver veileder på en gitt enhet.")
public FacetResults hentPortefoljestorrelser(@PathVariable("enhet") String enhet) {
ValideringsRegler.sjekkEnhet(enhet);
authService.innloggetVeilederHarTilgangTilEnhet(enhet);
@@ -80,6 +85,7 @@ public FacetResults hentPortefoljestorrelser(@PathVariable("enhet") String enhet
}
@GetMapping("/{enhet}/portefolje/statustall")
+ @Operation(summary = "Hent statustall for enhetsportefølje", description = "Henter statustall på enhetsnivå (statistikk for alle brukere under oppfølging tilknyttet enheten), delt opp i brukere som veileder som utfører forespørselen har tilgang til og brukere som veileder ikke har tilgang til å se detaljer om.")
public EnhetPortefoljeStatustallRespons hentEnhetPortefoljeStatustall(@PathVariable("enhet") String enhet) {
ValideringsRegler.sjekkEnhet(enhet);
authService.innloggetVeilederHarTilgangTilEnhet(enhet);
@@ -91,6 +97,7 @@ public EnhetPortefoljeStatustallRespons hentEnhetPortefoljeStatustall(@PathVaria
}
@GetMapping("/{enhet}/tiltak")
+ @Operation(summary = "Hent tiltak for enhet", description = "Henter alle tiltakstyper for enheten hvor minst én bruker er tilknyttet tiltaket.")
public EnhetTiltak hentTiltak(@PathVariable("enhet") String enhet) {
ValideringsRegler.sjekkEnhet(enhet);
authService.innloggetVeilederHarTilgangTilEnhet(enhet);
@@ -99,6 +106,7 @@ public EnhetTiltak hentTiltak(@PathVariable("enhet") String enhet) {
}
@GetMapping("/{enhet}/foedeland")
+ @Operation(summary = "Hent fødeland for enhet", description = "Henter en liste av fødeland for brukere på enheten. Listen inneholder kun land som er registrert på brukere på enheten.")
public List hentFoedeland(
@PathVariable("enhet")
String enhet) {
@@ -110,6 +118,7 @@ public List hentFoedeland(
}
@GetMapping("/{enhet}/tolkSpraak")
+ @Operation(summary = "Hent språk med tolkebehov for enhet", description = "Henter en liste av språk for enheten hvor det er tolkebehov. Listen inneholder kun språk som er registrert på brukere på enheten.")
public List hentTolkSpraak(
@PathVariable("enhet")
String enhet) {
@@ -122,6 +131,7 @@ public List hentTolkSpraak(
@GetMapping("/{enhet}/geografiskbosted")
+ @Operation(summary = "Hent geografiske bosteder for enhet", description = "Henter en liste av geografiske bosteder (kommuner og bydeler) for enheten. Listen inneholder kun geografiske bosteder som er registrert på brukere på enheten.")
public List hentGeografiskBosted(
@PathVariable("enhet")
String enhet) {
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/controller/Frontendlogger.java b/src/main/java/no/nav/pto/veilarbportefolje/controller/Frontendlogger.java
index 3a58c9193b..599f141372 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/controller/Frontendlogger.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/controller/Frontendlogger.java
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.controller;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
@@ -20,10 +22,12 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/logger")
+@Tag(name = "Frontendlogger", description = "Frontendlogger-funksjonalitet")
public class Frontendlogger {
private final MetricsClient metricsClient;
@PostMapping("/event")
+ @Operation(summary = "Skriv event til Influx", description = "Registrerer en frontend-hendelse og sender til InfluxDB.")
public void skrivEventTilInflux(@RequestBody FrontendEvent event) {
Event toInflux = new Event(event.name + ".event");
if (event.getTags() != null) {
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/controller/VeilederController.java b/src/main/java/no/nav/pto/veilarbportefolje/controller/VeilederController.java
index 25c00c1a82..bf96bb87e6 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/controller/VeilederController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/controller/VeilederController.java
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.controller;
+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.types.identer.EnhetId;
@@ -22,6 +24,7 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/veileder")
+@Tag(name = "Veileder", description = "Portefølje-funksjonalitet på veiledernivå.")
public class VeilederController {
private final OpensearchService opensearchService;
private final AuthService authService;
@@ -29,6 +32,7 @@ public class VeilederController {
private final AktivitetService aktivitetService;
@PostMapping("/{veilederident}/portefolje")
+ @Operation(summary = "Hent portefølje for veileder", description = "Henter en liste med brukere under oppfølging som er tilordnet veilederen.")
public Portefolje hentPortefoljeForVeileder(
@PathVariable("veilederident") String veilederIdent,
@RequestParam("enhet") String enhet,
@@ -55,6 +59,7 @@ public Portefolje hentPortefoljeForVeileder(
}
@GetMapping("/{veilederident}/portefolje/statustall")
+ @Operation(summary = "Hent statustall for veilederportefølje", description = "Henter statustall på veileder (statistikk for alle brukere under oppfølging tilordnet veilederen).")
public VeilederPortefoljeStatustallRespons hentVeilederportefoljeStatustall(@PathVariable("veilederident") String veilederIdent, @RequestParam("enhet") String enhet) {
ValideringsRegler.sjekkEnhet(enhet);
ValideringsRegler.sjekkVeilederIdent(veilederIdent, false);
@@ -66,6 +71,7 @@ public VeilederPortefoljeStatustallRespons hentVeilederportefoljeStatustall(@Pat
}
@GetMapping("/{veilederident}/hentArbeidslisteForVeileder")
+ @Operation(summary = "Hent arbeidslister for veileder", description = "Henter en liste av arbeidslister for en gitt veileder på en gitt enhet.")
public List hentArbeidslisteForVeileder(@PathVariable("veilederident") VeilederId veilederIdent, @RequestParam("enhet") EnhetId enhet) {
ValideringsRegler.sjekkEnhet(enhet.get());
ValideringsRegler.sjekkVeilederIdent(veilederIdent.getValue(), false);
@@ -75,6 +81,7 @@ public List hentArbeidslisteForVeileder(@PathVariable("veilederide
}
@GetMapping("{veilederident}/moteplan")
+ @Operation(summary = "Hent møteplan for veileder", description = "Henter en liste av fremtidige møter for en gitt veileder på en gitt enhet.")
public List hentMoteplanForVeileder(@PathVariable("veilederident") VeilederId veilederIdent, @RequestParam("enhet") EnhetId enhet) {
ValideringsRegler.sjekkEnhet(enhet.get());
ValideringsRegler.sjekkVeilederIdent(veilederIdent.getValue(), false);
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/fargekategori/FargekategoriController.java b/src/main/java/no/nav/pto/veilarbportefolje/fargekategori/FargekategoriController.java
index c08e69fe67..3cfe919589 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/fargekategori/FargekategoriController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/fargekategori/FargekategoriController.java
@@ -2,6 +2,8 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import no.nav.common.types.identer.AktorId;
import no.nav.common.types.identer.EnhetId;
@@ -28,6 +30,7 @@
@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
+@Tag(name = "Fargekategori", description = "Fargekategori-funksjonalitet")
public class FargekategoriController {
private final FargekategoriService fargekategoriService;
@@ -35,6 +38,7 @@ public class FargekategoriController {
private final BrukerServiceV2 brukerServiceV2;
@PostMapping("/hent-fargekategori")
+ @Operation(summary = "Hent fargekategori for bruker", description = "Henter fargekategorien en gitt bruker er merket med.")
public ResponseEntity hentFargekategoriForBruker(@RequestBody HentFargekategoriRequest request) {
validerRequest(request.fnr);
@@ -59,6 +63,7 @@ public ResponseEntity hentFargekategoriForBruker(@RequestBo
}
@PutMapping("/fargekategorier")
+ @Operation(summary = "Sett fargekategori for bruker(e)", description = "Setter en fargekategori for en eller flere brukere i samme operasjon.")
public ResponseEntity batchoppdaterFargekategoriForBruker(@RequestBody BatchoppdaterFargekategoriRequest request) {
VeilederId innloggetVeileder = AuthUtils.getInnloggetVeilederIdent();
authService.innloggetVeilederHarTilgangTilOppfolging();
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/huskelapp/controller/HuskelappController.java b/src/main/java/no/nav/pto/veilarbportefolje/huskelapp/controller/HuskelappController.java
index b211d7c08c..cd4e4cd903 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/huskelapp/controller/HuskelappController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/huskelapp/controller/HuskelappController.java
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.huskelapp.controller;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import io.vavr.control.Validation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -32,6 +34,7 @@
@RequestMapping("/api/v1")
@RequiredArgsConstructor
@Slf4j
+@Tag(name = "Huskelapp", description = "Huskelapp-funksjonalitet")
public class HuskelappController {
private final HuskelappService huskelappService;
@@ -40,6 +43,7 @@ public class HuskelappController {
private final VeilarbVeilederClient veilarbVeilederClient;
@PostMapping("/huskelapp")
+ @Operation(summary = "Opprett huskelapp", description = "Oppretter en huskelapp for en gitt bruker på en gitt enhet.")
public ResponseEntity opprettHuskelapp(@RequestBody HuskelappOpprettRequest huskelappOpprettRequest) {
validerOppfolgingOgBrukerOgEnhet(huskelappOpprettRequest.brukerFnr().get());
try {
@@ -62,6 +66,7 @@ public ResponseEntity opprettHuskelapp(@RequestBody Hu
}
@PutMapping("/huskelapp")
+ @Operation(summary = "Oppdater huskelapp", description = "Oppdaterer huskelappen for en gitt bruker med nye felter.")
public ResponseEntity redigerHuskelapp(@RequestBody HuskelappRedigerRequest huskelappRedigerRequest) {
validerOppfolgingOgBrukerOgEnhet(huskelappRedigerRequest.brukerFnr().get());
try {
@@ -86,6 +91,7 @@ public ResponseEntity redigerHuskelapp(@RequestBody HuskelappRedigerRequest husk
}
@PostMapping("/hent-huskelapp-for-bruker")
+ @Operation(summary = "Hent huskelapp for bruker", description = "Henter aktiv huskelapp for en gitt bruker.")
public ResponseEntity hentHuskelapp(@RequestBody HuskelappForBrukerRequest huskelappForBrukerRequest) {
validerOppfolgingOgBrukerOgEnhet(huskelappForBrukerRequest.fnr().get());
try {
@@ -97,6 +103,7 @@ public ResponseEntity hentHuskelapp(@RequestBody HuskelappFor
}
@DeleteMapping("/huskelapp")
+ @Operation(summary = "Slett huskelapp", description = "Setter huskelapp som inaktiv i databasen og sletter den fra søkemotoren (OpenSearch).")
public ResponseEntity slettHuskelapp(@RequestBody HuskelappSlettRequest huskelappSlettRequest) {
Optional huskelappOptional = huskelappService.hentHuskelapp(UUID.fromString(huskelappSlettRequest.huskelappId()));
@@ -124,6 +131,7 @@ public Boolean harBrukerenTildeltVeileder(Fnr fnr) {
}
@PostMapping("/hent-er-bruker-ufordelt")
+ @Operation(summary = "Hent om bruker er ufordelt", description = "Sjekker om bruker er ufordelt og returnerer true hvis bruker er ufordelt.")
public ResponseEntity hentErBrukerUfordelt(@RequestBody HentErBrukerUfordelt request) {
Optional navKontor = brukerServiceV2.hentNavKontor(request.fnr);
if (navKontor.isEmpty()) {
diff --git a/src/main/java/no/nav/pto/veilarbportefolje/internal/InternalController.java b/src/main/java/no/nav/pto/veilarbportefolje/internal/InternalController.java
index 0afe81494f..b8b50bbcb7 100644
--- a/src/main/java/no/nav/pto/veilarbportefolje/internal/InternalController.java
+++ b/src/main/java/no/nav/pto/veilarbportefolje/internal/InternalController.java
@@ -1,5 +1,7 @@
package no.nav.pto.veilarbportefolje.internal;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import no.nav.common.health.selftest.SelfTestChecks;
import no.nav.common.health.selftest.SelfTestUtils;
@@ -18,18 +20,22 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/internal")
+@Tag(name = "Internal", description = "Intern funksjonalitet. Benyttes hovedsakelig av kjøretidsplattformen.")
public class InternalController {
private final SelfTestChecks selfTestChecks;
@GetMapping("/isReady")
+ @Operation(summary = "Applikasjon klar for trafikk", description = "Sjekker om applikasjonen er klar til å motta trafikk.")
public void isReady() {
}
@GetMapping("/isAlive")
+ @Operation(summary = "Applikasjon kjører", description = "Sjekker om applikasjonen kjører.")
public void isAlive() {
}
@GetMapping("/selftest")
+ @Operation(summary = "Sjekk applikasjonens helsesjekker", description = "Utfører helsesjekk for tjenester som applikasjonen er avhengig av og generer rapport.")
public ResponseEntity selftest() {
List results = checkAllParallel(selfTestChecks.getSelfTestChecks());
String html = SelftestHtmlGenerator.generate(results);
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index eaec97a481..aa67df1983 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -12,6 +12,9 @@ management.endpoints.web.base-path=/internal
management.endpoints.web.exposure.include=prometheus
management.endpoint.prometheus.enabled=true
management.prometheus.metrics.export.enabled=true
+# swagger-ui custom path
+springdoc.swagger-ui.path=/internal/swagger-ui.html
+springdoc.pathsToMatch=/api/**
# Application environment
app.env.opensearchUri=${OPEN_SEARCH_URI}
app.env.opensearchUsername=${OPEN_SEARCH_USERNAME}