ProcessCatalogController.java

  1. package no.nav.data.team.integration.process;

  2. import io.swagger.v3.oas.annotations.Operation;
  3. import io.swagger.v3.oas.annotations.responses.ApiResponse;
  4. import io.swagger.v3.oas.annotations.responses.ApiResponses;
  5. import io.swagger.v3.oas.annotations.tags.Tag;
  6. import lombok.RequiredArgsConstructor;
  7. import lombok.extern.slf4j.Slf4j;
  8. import no.nav.data.common.rest.RestResponsePage;
  9. import no.nav.data.team.integration.process.dto.ProcessResponse;
  10. import no.nav.data.team.team.TeamService;
  11. import no.nav.data.team.team.domain.Team;
  12. import org.springframework.http.ResponseEntity;
  13. import org.springframework.web.bind.annotation.GetMapping;
  14. import org.springframework.web.bind.annotation.RequestMapping;
  15. import org.springframework.web.bind.annotation.RequestParam;
  16. import org.springframework.web.bind.annotation.RestController;

  17. import java.util.Collection;
  18. import java.util.List;
  19. import java.util.UUID;
  20. import java.util.stream.Collectors;

  21. import static no.nav.data.common.utils.StreamUtils.distinctByKey;

  22. @Slf4j
  23. @RestController
  24. @Tag(description = "ProcessCatalog", name = "Integration")
  25. @RequestMapping("/integration/pcat")
  26. @RequiredArgsConstructor
  27. public class ProcessCatalogController {

  28.     private final TeamService teamService;
  29.     private final ProcessCatalogClient client;

  30.     @Operation(summary = "Get Processes")
  31.     @ApiResponses(value = {@ApiResponse(description = "Processes fetched")})
  32.     @GetMapping("/process")
  33.     public ResponseEntity<RestResponsePage<ProcessResponse>> getProcesses(
  34.             @RequestParam(required = false) UUID teamId,
  35.             @RequestParam(required = false) UUID productAreaId,
  36.             @RequestParam(required = false) UUID clusterId
  37.     ) {
  38.         List<ProcessResponse> processes = null;
  39.         if (teamId != null) {
  40.             processes = client.getProcessesForTeam(teamId);
  41.         } else if (productAreaId != null) {
  42.             processes = getProcessesForTeams(teamService.findByProductArea(productAreaId));
  43.         } else if (clusterId != null) {
  44.             processes = getProcessesForTeams(teamService.findByCluster(clusterId));
  45.         }
  46.         if (processes != null) {
  47.             return ResponseEntity.ok(new RestResponsePage<>(distinctByKey(processes, ProcessResponse::getId)));
  48.         }

  49.         return ResponseEntity.badRequest().build();
  50.     }

  51.     private List<ProcessResponse> getProcessesForTeams(List<Team> teams) {
  52.         return teams.parallelStream()
  53.                 .map(Team::getId)
  54.                 .map(client::getProcessesForTeam)
  55.                 .flatMap(Collection::stream)
  56.                 .collect(Collectors.toList());
  57.     }

  58.     static class ProcessPage extends RestResponsePage<ProcessResponse> {

  59.     }

  60. }