diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 0c9e05cc..357814af 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -7,7 +7,7 @@ env: permissions: packages: write contents: write - + jobs: test: name: Run tests diff --git a/src/main/java/no/nav/veilarbperson/controller/Frontendlogger.kt b/src/main/java/no/nav/veilarbperson/controller/v1/Frontendlogger.kt similarity index 97% rename from src/main/java/no/nav/veilarbperson/controller/Frontendlogger.kt rename to src/main/java/no/nav/veilarbperson/controller/v1/Frontendlogger.kt index 7468f6a7..4abef378 100644 --- a/src/main/java/no/nav/veilarbperson/controller/Frontendlogger.kt +++ b/src/main/java/no/nav/veilarbperson/controller/v1/Frontendlogger.kt @@ -1,4 +1,4 @@ -package no.nav.veilarbperson.controller +package no.nav.veilarbperson.controller.v1 import no.nav.common.metrics.Event import no.nav.common.metrics.MetricsClient @@ -38,4 +38,4 @@ class Frontendlogger(val metricsClient: MetricsClient) { return ("name: " + name + ".event, fields: " + (event.fields?.entries ?: "[]") + ", tags: " + (event.tags?.entries ?: "[]")) } -} \ No newline at end of file +} diff --git a/src/main/java/no/nav/veilarbperson/controller/InternalController.java b/src/main/java/no/nav/veilarbperson/controller/v1/InternalController.java similarity index 97% rename from src/main/java/no/nav/veilarbperson/controller/InternalController.java rename to src/main/java/no/nav/veilarbperson/controller/v1/InternalController.java index adad6056..723f32fa 100644 --- a/src/main/java/no/nav/veilarbperson/controller/InternalController.java +++ b/src/main/java/no/nav/veilarbperson/controller/v1/InternalController.java @@ -1,4 +1,4 @@ -package no.nav.veilarbperson.controller; +package no.nav.veilarbperson.controller.v1; import no.nav.common.health.selftest.SelfTestChecks; import no.nav.common.health.selftest.SelfTestUtils; diff --git a/src/main/java/no/nav/veilarbperson/controller/PersonController.java b/src/main/java/no/nav/veilarbperson/controller/v1/PersonController.java similarity index 96% rename from src/main/java/no/nav/veilarbperson/controller/PersonController.java rename to src/main/java/no/nav/veilarbperson/controller/v1/PersonController.java index f8189e6a..e26fcfc4 100644 --- a/src/main/java/no/nav/veilarbperson/controller/PersonController.java +++ b/src/main/java/no/nav/veilarbperson/controller/v1/PersonController.java @@ -1,4 +1,4 @@ -package no.nav.veilarbperson.controller; +package no.nav.veilarbperson.controller.v1; import io.swagger.v3.oas.annotations.Operation; import lombok.AllArgsConstructor; @@ -30,7 +30,7 @@ public class PersonController { private final RegistreringService registreringService; - + @Deprecated @GetMapping("/aktorid") public AktoerId aktorid(@RequestParam("fnr") Fnr fnr) { authService.stoppHvisEksternBruker(); @@ -38,19 +38,21 @@ public AktoerId aktorid(@RequestParam("fnr") Fnr fnr) { return new AktoerId(authService.getAktorId(fnr)); } + @Deprecated @GetMapping("/navn") @Operation(summary = "Henter navnet til en person") public PersonNavn navn(@RequestParam(value = "fnr", required = false) Fnr fnr) { throw new ResponseStatusException(HttpStatus.GONE, "Bytt til v2 endepunkt"); } + @Deprecated @GetMapping("/{fodselsnummer}/malform") @Operation(summary = "Henter målform til en person") public Malform malform(@PathVariable("fodselsnummer") Fnr fnr) { throw new ResponseStatusException(HttpStatus.GONE, "Bytt til v2 endepunkt"); } - + @Deprecated @GetMapping("/{fodselsnummer}/tilgangTilBruker") public boolean tilgangTilBruker(@PathVariable("fodselsnummer") Fnr fodselsnummer) { return authService.harLesetilgang(fodselsnummer); @@ -67,6 +69,7 @@ public HarLoggetInnRespons harNivaa4(@PathVariable("fodselsnummer") Fnr fodselsn .setPersonidentifikator(fodselsnummer); } + @Deprecated @GetMapping("/geografisktilknytning") public GeografiskTilknytning geografisktilknytning(@RequestParam(value = "fnr", required = false) Fnr fnr) { Fnr fodselsnummer = hentIdentForEksternEllerIntern(fnr); @@ -74,11 +77,13 @@ public GeografiskTilknytning geografisktilknytning(@RequestParam(value = "fnr", return personV2Service.hentGeografiskTilknytning(fodselsnummer); } + @Deprecated @GetMapping("/cv_jobbprofil") public ResponseEntity cvOgJobbprofil(@RequestParam(value = "fnr", required = false) Fnr fnr) { return cvJobbprofilService.hentCvJobbprofilJson(fnr); } + @Deprecated @GetMapping("/registrering") public ResponseEntity registrering(@RequestParam(value = "fnr") Fnr fnr) { authService.stoppHvisEksternBruker(); @@ -86,6 +91,7 @@ public ResponseEntity registrering(@RequestParam(value = "fnr") Fnr fnr) return registreringService.hentRegistrering(fnr); } + @Deprecated @PostMapping("/registrering/endringer") public ResponseEntity endringIRegistreringdata(@RequestBody PersonRequestBody personRequestBody) { Fnr fnr = Fnr.of(personRequestBody.fodselsnummer()); diff --git a/src/main/java/no/nav/veilarbperson/controller/PersonV2Controller.java b/src/main/java/no/nav/veilarbperson/controller/v2/PersonV2Controller.java similarity index 96% rename from src/main/java/no/nav/veilarbperson/controller/PersonV2Controller.java rename to src/main/java/no/nav/veilarbperson/controller/v2/PersonV2Controller.java index c87dbe93..44490dc0 100644 --- a/src/main/java/no/nav/veilarbperson/controller/PersonV2Controller.java +++ b/src/main/java/no/nav/veilarbperson/controller/v2/PersonV2Controller.java @@ -1,4 +1,4 @@ -package no.nav.veilarbperson.controller; +package no.nav.veilarbperson.controller.v2; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; @@ -26,6 +26,7 @@ public class PersonV2Controller { private final KontoregisterClient kontoregisterClient; + @Deprecated @GetMapping @Operation(summary = "Henter informasjon om en person fra PDL") public PersonV2Data hentPerson(@RequestParam("fnr") Fnr fnr) { @@ -34,6 +35,7 @@ public PersonV2Data hentPerson(@RequestParam("fnr") Fnr fnr) { return personV2Service.hentFlettetPerson(fnr); } + @Deprecated @GetMapping("/malform") @Operation(summary = "Henter malform fra DIGDIR tjeneste") public Malform malform(@RequestParam("fnr") Fnr fnr) { @@ -44,6 +46,7 @@ public Malform malform(@RequestParam("fnr") Fnr fnr) { return new Malform(malform); } + @Deprecated @GetMapping("/vergeOgFullmakt") @Operation(summary = "Henter informasjon om verge og fullmakt for en person fra PDL") public VergeOgFullmaktData hentVergemaalOgFullmakt(@RequestParam("fnr") Fnr fnr) { @@ -52,6 +55,7 @@ public VergeOgFullmaktData hentVergemaalOgFullmakt(@RequestParam("fnr") Fnr fnr) return personV2Service.hentVergeEllerFullmakt(fnr); } + @Deprecated @GetMapping("/tolk") @Operation(summary = "Henter tolk informajon til en person fra PDL") public TilrettelagtKommunikasjonData hentSpraakTolk(@RequestParam("fnr") Fnr fnr) { @@ -60,6 +64,7 @@ public TilrettelagtKommunikasjonData hentSpraakTolk(@RequestParam("fnr") Fnr fnr return personV2Service.hentSpraakTolkInfo(fnr); } + @Deprecated @GetMapping("/navn") @Operation(summary = "Henter navn til en person fra PDL") public PersonNavnV2 hentNavn(@RequestParam("fnr") Fnr fnr) { @@ -68,6 +73,7 @@ public PersonNavnV2 hentNavn(@RequestParam("fnr") Fnr fnr) { return personV2Service.hentNavn(fnr); } + @Deprecated @GetMapping("/postadresse") @Operation(summary = "Henter postadresse til en person fra regoppslag") public RegoppslagResponseDTO hentPostadresse(@RequestParam("fnr") Fnr fnr) { diff --git a/src/main/java/no/nav/veilarbperson/controller/v3/PersonV3Controller.java b/src/main/java/no/nav/veilarbperson/controller/v3/PersonV3Controller.java new file mode 100644 index 00000000..93f6a366 --- /dev/null +++ b/src/main/java/no/nav/veilarbperson/controller/v3/PersonV3Controller.java @@ -0,0 +1,140 @@ +package no.nav.veilarbperson.controller.v3; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import no.nav.common.types.identer.Fnr; +import no.nav.veilarbperson.client.difi.HarLoggetInnRespons; +import no.nav.veilarbperson.client.kontoregister.HentKontoRequestDTO; +import no.nav.veilarbperson.client.kontoregister.KontoregisterClient; +import no.nav.veilarbperson.client.kontoregister.HentKontoResponseDTO; +import no.nav.veilarbperson.client.regoppslag.RegoppslagClient; +import no.nav.veilarbperson.client.regoppslag.RegoppslagResponseDTO; +import no.nav.veilarbperson.domain.*; +import no.nav.veilarbperson.service.AuthService; +import no.nav.veilarbperson.service.CvJobbprofilService; +import no.nav.veilarbperson.service.PersonV2Service; +import no.nav.veilarbperson.service.RegistreringService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +@Slf4j +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v3/person") +public class PersonV3Controller { + + private final PersonV2Service personV2Service; + private final AuthService authService; + private final RegoppslagClient regoppslagClient; + + private final CvJobbprofilService cvJobbprofilService; + + private final RegistreringService registreringService; + + @PostMapping + @Operation(summary = "Henter informasjon om en person fra PDL") + public PersonV2Data hentPerson(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return personV2Service.hentFlettetPerson(personRequest.getFnr()); + } + @PostMapping("/aktorid") + public AktoerId aktorid(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return new AktoerId(authService.getAktorId(personRequest.getFnr())); + } + + @PostMapping("/tilgangTilBruker") + public boolean tilgangTilBruker(@RequestBody PersonRequest personRequest) { + return authService.harLesetilgang(personRequest.getFnr()); + } + @GetMapping("/geografisktilknytning") + public GeografiskTilknytning geografisktilknytning(@RequestBody PersonRequest personRequest) { + Fnr fodselsnummer = hentIdentForEksternEllerIntern(personRequest.getFnr()); + authService.sjekkLesetilgang(fodselsnummer); + return personV2Service.hentGeografiskTilknytning(fodselsnummer); + } + + @GetMapping("/cv_jobbprofil") + public ResponseEntity cvOgJobbprofil(@RequestBody PersonRequest personRequest) { + return cvJobbprofilService.hentCvJobbprofilJson(personRequest.getFnr()); + } + + @GetMapping("/registrering") + public ResponseEntity registrering(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return registreringService.hentRegistrering(personRequest.getFnr()); + } + + @PostMapping("/registrering/endringer") + public ResponseEntity endringIRegistreringdata(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return registreringService.hentEndringIRegistreringsdata(personRequest.getFnr()); + } + + @PostMapping("/malform") + @Operation(summary = "Henter malform fra DIGDIR tjeneste") + public Malform malform(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + + String malform = personV2Service.hentMalform(personRequest.getFnr()); + return new Malform(malform); + } + + @PostMapping("/vergeOgFullmakt") + @Operation(summary = "Henter informasjon om verge og fullmakt for en person fra PDL") + public VergeOgFullmaktData hentVergemaalOgFullmakt(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return personV2Service.hentVergeEllerFullmakt(personRequest.getFnr()); + } + + @PostMapping("/tolk") + @Operation(summary = "Henter tolk informajon til en person fra PDL") + public TilrettelagtKommunikasjonData hentSpraakTolk(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return personV2Service.hentSpraakTolkInfo(personRequest.getFnr()); + } + + @PostMapping("/navn") + @Operation(summary = "Henter navn til en person fra PDL") + public PersonNavnV2 hentNavn(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return personV2Service.hentNavn(personRequest.getFnr()); + } + + @PostMapping("/postadresse") + @Operation(summary = "Henter postadresse til en person fra regoppslag") + public RegoppslagResponseDTO hentPostadresse(@RequestBody PersonRequest personRequest) { + authService.stoppHvisEksternBruker(); + authService.sjekkLesetilgang(personRequest.getFnr()); + return regoppslagClient.hentPostadresse(personRequest.getFnr()); + } + private Fnr hentIdentForEksternEllerIntern(Fnr queryParamFnr) { + Fnr fnr; + + if (authService.erInternBruker()) { + if (queryParamFnr == null) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Mangler fnr"); + } + fnr = queryParamFnr; + } else if (authService.erEksternBruker()) { + fnr = Fnr.of(authService.getInnloggerBrukerUid()); + } else { + // Systembruker har ikke tilgang + throw new ResponseStatusException(HttpStatus.FORBIDDEN); + } + + return fnr; + } + +} diff --git a/src/main/java/no/nav/veilarbperson/domain/PersonRequest.kt b/src/main/java/no/nav/veilarbperson/domain/PersonRequest.kt new file mode 100644 index 00000000..1aeb6d8a --- /dev/null +++ b/src/main/java/no/nav/veilarbperson/domain/PersonRequest.kt @@ -0,0 +1,7 @@ +package no.nav.veilarbperson.domain + +import no.nav.common.types.identer.Fnr + +data class PersonRequest( + val fnr: Fnr +) diff --git a/src/test/java/no/nav/veilarbperson/config/ControllerTestConfig.java b/src/test/java/no/nav/veilarbperson/config/ControllerTestConfig.java index 450d73b0..7c24eaca 100644 --- a/src/test/java/no/nav/veilarbperson/config/ControllerTestConfig.java +++ b/src/test/java/no/nav/veilarbperson/config/ControllerTestConfig.java @@ -1,8 +1,9 @@ package no.nav.veilarbperson.config; -import no.nav.veilarbperson.controller.InternalController; -import no.nav.veilarbperson.controller.PersonV2Controller; -import no.nav.veilarbperson.controller.PersonController; +import no.nav.veilarbperson.controller.v1.InternalController; +import no.nav.veilarbperson.controller.v2.PersonV2Controller; +import no.nav.veilarbperson.controller.v1.PersonController; +import no.nav.veilarbperson.controller.v3.PersonV3Controller; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -10,6 +11,7 @@ @Import({ PersonController.class, InternalController.class, - PersonV2Controller.class + PersonV2Controller.class, + PersonV3Controller.class }) public class ControllerTestConfig {} diff --git a/src/test/java/no/nav/veilarbperson/controller/PersonControllerTest.java b/src/test/java/no/nav/veilarbperson/controller/PersonControllerTest.java index 6ebdbaa7..1519182f 100644 --- a/src/test/java/no/nav/veilarbperson/controller/PersonControllerTest.java +++ b/src/test/java/no/nav/veilarbperson/controller/PersonControllerTest.java @@ -2,6 +2,7 @@ import com.github.tomakehurst.wiremock.client.WireMock; import no.nav.veilarbperson.config.ApplicationTestConfig; +import no.nav.veilarbperson.controller.v1.PersonController; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;