|
3 | 3 | import lombok.RequiredArgsConstructor;
|
4 | 4 | import lombok.extern.slf4j.Slf4j;
|
5 | 5 | import no.nav.testnav.altinn3tilgangservice.consumer.altinn.AltinnConsumer;
|
| 6 | +import no.nav.testnav.altinn3tilgangservice.consumer.altinn.dto.AuthorizedPartyDTO; |
6 | 7 | import no.nav.testnav.altinn3tilgangservice.domain.PersonRequest;
|
| 8 | +import no.nav.testnav.libs.dto.altinn3.v1.OrganisasjonDTO; |
7 | 9 | import org.springframework.stereotype.Service;
|
| 10 | +import reactor.core.publisher.Flux; |
8 | 11 | import reactor.core.publisher.Mono;
|
9 | 12 |
|
| 13 | +import java.util.ArrayList; |
| 14 | +import java.util.List; |
| 15 | +import java.util.stream.Stream; |
| 16 | + |
10 | 17 | @Slf4j
|
11 | 18 | @Service
|
12 | 19 | @RequiredArgsConstructor
|
13 | 20 | public class AltinnBrukerTilgangService {
|
14 | 21 |
|
| 22 | + private static final String DOLLY_RESOURCE = "nav_dolly_tilgang-samarbeidspartnere"; |
15 | 23 | private final AltinnConsumer altinnConsumer;
|
16 | 24 |
|
17 |
| - public Mono<Boolean> harDollyTilgang(PersonRequest personRequest) { |
| 25 | + public Flux<OrganisasjonDTO> getOrgsMedDollyTilgang(PersonRequest personRequest) { |
18 | 26 |
|
19 | 27 | return altinnConsumer.getAuthorizedParties(personRequest.getIdent())
|
20 |
| - .doOnNext(party -> log.info("AuthorizedParty {}", party)) |
21 |
| - .filter(party -> party.getOrganizationNumber().equals(personRequest.getOrgnummer())) |
22 |
| - .filter(part -> part.getAuthorizedResources().contains("dolly")) |
23 |
| - .reduce(Boolean.FALSE, (a, b) -> Boolean.TRUE); |
| 28 | + .flatMap(authorizedParty -> getUnitsAndSubunits(new ArrayList<>(), authorizedParty)) |
| 29 | + .flatMap(Flux::fromIterable); |
| 30 | + } |
| 31 | + |
| 32 | + private Mono<List<OrganisasjonDTO>> getUnitsAndSubunits(List<OrganisasjonDTO> organisasjoner, |
| 33 | + AuthorizedPartyDTO authorizedParties) { |
| 34 | + |
| 35 | + organisasjoner.addAll(Stream.of(authorizedParties) |
| 36 | + .filter(part -> part.getAuthorizedResources().contains(DOLLY_RESOURCE)) |
| 37 | + .map(part -> OrganisasjonDTO.builder() |
| 38 | + .navn(part.getName()) |
| 39 | + .organisasjonsnummer(part.getOrganizationNumber()) |
| 40 | + .organisasjonsform(part.getUnitType()) |
| 41 | + .build()) |
| 42 | + .toList()); |
| 43 | + |
| 44 | + if (!authorizedParties.getSubunits().isEmpty()) { |
| 45 | + authorizedParties.getSubunits() |
| 46 | + .forEach(subunit -> getUnitsAndSubunits(organisasjoner, subunit)); |
| 47 | + } |
| 48 | + return Mono.just(organisasjoner); |
24 | 49 | }
|
25 | 50 | }
|
0 commit comments