4
4
import com .fasterxml .jackson .annotation .JsonProperty ;
5
5
import io .vavr .control .Validation ;
6
6
import lombok .RequiredArgsConstructor ;
7
+ import no .nav .common .types .identer .EnhetId ;
7
8
import no .nav .common .types .identer .Fnr ;
8
9
import no .nav .pto .veilarbportefolje .auth .AuthService ;
9
10
import no .nav .pto .veilarbportefolje .auth .AuthUtils ;
15
16
import org .springframework .web .bind .annotation .*;
16
17
import org .springframework .web .server .ResponseStatusException ;
17
18
18
- import java .util .*;
19
+ import java .util .Collections ;
20
+ import java .util .List ;
21
+ import java .util .Optional ;
22
+ import java .util .Set ;
23
+ import java .util .stream .Collectors ;
19
24
import java .util .stream .Stream ;
20
25
21
26
import static no .nav .pto .veilarbportefolje .util .SecureLog .secureLog ;
@@ -33,14 +38,8 @@ public class FargekategoriController {
33
38
public ResponseEntity <FargekategoriEntity > hentFargekategoriForBruker (@ RequestBody HentFargekategoriRequest request ) {
34
39
validerRequest (request .fnr );
35
40
36
- Optional <NavKontor > brukerEnhet = brukerServiceV2 .hentNavKontor (request .fnr );
37
- if (brukerEnhet .isEmpty ()) {
38
- throw new ResponseStatusException (HttpStatus .NOT_FOUND , "Bruker med oppgitt fnr er ikke under oppfølging" );
39
- }
40
-
41
41
authService .innloggetVeilederHarTilgangTilOppfolging ();
42
42
authService .innloggetVeilederHarTilgangTilBruker (request .fnr .get ());
43
- authService .innloggetVeilederHarTilgangTilEnhet (brukerEnhet .get ().toString ());
44
43
45
44
try {
46
45
Optional <FargekategoriEntity > kanskjeFargekategori = fargekategoriService .hentFargekategoriForBruker (request );
@@ -59,27 +58,23 @@ public ResponseEntity<FargekategoriResponse> oppdaterFargekategoriForBruker(@Req
59
58
VeilederId innloggetVeileder = AuthUtils .getInnloggetVeilederIdent ();
60
59
validerRequest (request .fnr );
61
60
62
- Optional <NavKontor > brukerEnhet = brukerServiceV2 .hentNavKontor (request .fnr );
63
-
64
- if (brukerEnhet .isEmpty ()) {
65
- throw new ResponseStatusException (HttpStatus .NOT_FOUND , "Bruker med oppgitt fnr er ikke under oppfølging" );
66
- }
61
+ NavKontor navKontorForBruker = brukerServiceV2 .hentNavKontor (request .fnr ).orElseThrow (() -> new ResponseStatusException (HttpStatus .FORBIDDEN , "Bruker er ikke tilordnet enhet" ));
67
62
68
63
authService .innloggetVeilederHarTilgangTilOppfolging ();
69
64
authService .innloggetVeilederHarTilgangTilBruker (request .fnr .get ());
70
- authService .innloggetVeilederHarTilgangTilEnhet (brukerEnhet . get (). toString ());
65
+ authService .innloggetVeilederHarTilgangTilEnhet (navKontorForBruker . getValue ());
71
66
Validation <String , Fnr > erVeilederForBrukerValidation = fargekategoriService .erVeilederForBruker (request .fnr .get ());
72
67
73
68
if (erVeilederForBrukerValidation .isInvalid ()) {
74
69
throw new ResponseStatusException (HttpStatus .FORBIDDEN , "Bruker er ikke tilordnet veileder" );
75
70
}
76
71
77
72
try {
78
- Optional <FargekategoriEntity > fargekategoriEntity = fargekategoriService .oppdaterFargekategoriForBruker (request , innloggetVeileder );
73
+ Optional <FargekategoriEntity > fargekategoriEntity = fargekategoriService .oppdaterFargekategoriForBruker (request , innloggetVeileder , EnhetId . of ( navKontorForBruker . getValue ()) );
79
74
80
75
return fargekategoriEntity
81
76
.map (fargekategori -> ResponseEntity .ok (new FargekategoriResponse (fargekategori .fnr (), fargekategori .fargekategoriVerdi ())))
82
- .orElseGet (() -> ResponseEntity .ok (new FargekategoriResponse (request .fnr (), FargekategoriVerdi .INGEN_KATEGORI )));
77
+ .orElseGet (() -> ResponseEntity .ok (new FargekategoriResponse (request .fnr (), FargekategoriVerdi .INGEN_KATEGORI )));
83
78
} catch (Exception e ) {
84
79
String melding = String .format ("Klarte ikke å opprette/oppdatere fargekategori med verdi %s for fnr %s" , request .fargekategoriVerdi .name (), request .fnr .get ());
85
80
secureLog .error (melding , e );
@@ -100,14 +95,27 @@ public ResponseEntity<BatchUpsertResponse> batchoppdaterFargekategoriForBruker(@
100
95
101
96
BatchUpsertResponse responseEtterAutoriseringssjekk = sjekkVeilederautorisering (responseEtterValidering .data , request .fargekategoriVerdi );
102
97
List <Fnr > feilFraValideringOgAutorisering = Stream .concat (responseEtterValidering .errors .stream (), responseEtterAutoriseringssjekk .errors .stream ()).toList ();
103
- BatchUpsertResponse resultatFraValideringOgAutorisering = new BatchUpsertResponse (responseEtterAutoriseringssjekk .data , feilFraValideringOgAutorisering , request .fargekategoriVerdi );
98
+ BatchUpsertResponse resultatFraValideringOgAutorisering = new BatchUpsertResponse (responseEtterAutoriseringssjekk .data , feilFraValideringOgAutorisering , request .fargekategoriVerdi );
104
99
105
- if (responseEtterAutoriseringssjekk .data .isEmpty ()) {
100
+ if (responseEtterAutoriseringssjekk .data .isEmpty ()) {
106
101
return ResponseEntity .status (403 ).body (resultatFraValideringOgAutorisering );
107
102
}
108
103
104
+ Set <NavKontor > brukerEnheter = request .fnr .stream ()
105
+ .map (brukerServiceV2 ::hentNavKontor )
106
+ .filter (Optional ::isPresent )
107
+ .map (Optional ::get )
108
+ .collect (Collectors .toSet ());
109
+
110
+ if (brukerEnheter .size () != 1 ) {
111
+ throw new ResponseStatusException (HttpStatus .FORBIDDEN , "Kan ikke oppdatere fargekategori i flere enheter samtidig." );
112
+ }
113
+
114
+ EnhetId enhetId = EnhetId .of (brukerEnheter .iterator ().next ().getValue ());
115
+ authService .innloggetVeilederHarTilgangTilEnhet (enhetId .get ());
116
+
109
117
try {
110
- fargekategoriService .batchoppdaterFargekategoriForBruker (request .fargekategoriVerdi , responseEtterAutoriseringssjekk .data , innloggetVeileder );
118
+ fargekategoriService .batchoppdaterFargekategoriForBruker (request .fargekategoriVerdi , responseEtterAutoriseringssjekk .data , innloggetVeileder , enhetId );
111
119
112
120
return ResponseEntity .ok (resultatFraValideringOgAutorisering );
113
121
@@ -144,19 +152,9 @@ private BatchUpsertResponse sjekkVeilederautorisering(List<Fnr> fodselsnumre, Fa
144
152
145
153
fodselsnumre .forEach (fnr -> {
146
154
try {
147
- Optional <NavKontor > brukerEnhet = brukerServiceV2 .hentNavKontor (fnr );
148
155
149
156
/* Vi sjekkar om bruker er under oppfølging i autorisering i staden for i validering
150
157
* for å unngå at feilmeldinga avslører om eit fnr er i systemet. (400 bad request vs 403 forbidden) */
151
- boolean brukerErIkkeUnderOppfølging = brukerEnhet .isEmpty ();
152
- if (brukerErIkkeUnderOppfølging ) {
153
- throw new ResponseStatusException (
154
- HttpStatus .NOT_FOUND ,
155
- "Bruker med oppgitt fnr er ikke under oppfølging"
156
- );
157
- }
158
-
159
- authService .innloggetVeilederHarTilgangTilEnhet (brukerEnhet .get ().getValue ());
160
158
161
159
authService .innloggetVeilederHarTilgangTilBruker (fnr .get ());
162
160
@@ -195,11 +193,12 @@ public record OppdaterFargekategoriRequest(
195
193
}
196
194
197
195
public record BatchoppdaterFargekategoriRequest (
198
- @ JsonProperty (required = true ) List <Fnr > fnr ,
199
- @ JsonProperty (required = true ) FargekategoriVerdi fargekategoriVerdi
196
+ @ JsonProperty (required = true ) List <Fnr > fnr ,
197
+ @ JsonProperty (required = true ) FargekategoriVerdi fargekategoriVerdi
200
198
) {
201
199
@ JsonCreator (mode = JsonCreator .Mode .PROPERTIES )
202
- public BatchoppdaterFargekategoriRequest {}
200
+ public BatchoppdaterFargekategoriRequest {
201
+ }
203
202
}
204
203
205
204
public record BatchUpsertResponse (List <Fnr > data , List <Fnr > errors , FargekategoriVerdi fargekategoriVerdi ) {
0 commit comments