ProcessCatalogController.java
- package no.nav.data.team.integration.process;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.responses.ApiResponse;
- import io.swagger.v3.oas.annotations.responses.ApiResponses;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import no.nav.data.common.rest.RestResponsePage;
- import no.nav.data.team.integration.process.dto.ProcessResponse;
- import no.nav.data.team.team.TeamService;
- import no.nav.data.team.team.domain.Team;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.Collection;
- import java.util.List;
- import java.util.UUID;
- import java.util.stream.Collectors;
- import static no.nav.data.common.utils.StreamUtils.distinctByKey;
- @Slf4j
- @RestController
- @Tag(description = "ProcessCatalog", name = "Integration")
- @RequestMapping("/integration/pcat")
- @RequiredArgsConstructor
- public class ProcessCatalogController {
- private final TeamService teamService;
- private final ProcessCatalogClient client;
- @Operation(summary = "Get Processes")
- @ApiResponses(value = {@ApiResponse(description = "Processes fetched")})
- @GetMapping("/process")
- public ResponseEntity<RestResponsePage<ProcessResponse>> getProcesses(
- @RequestParam(required = false) UUID teamId,
- @RequestParam(required = false) UUID productAreaId,
- @RequestParam(required = false) UUID clusterId
- ) {
- List<ProcessResponse> processes = null;
- if (teamId != null) {
- processes = client.getProcessesForTeam(teamId);
- } else if (productAreaId != null) {
- processes = getProcessesForTeams(teamService.findByProductArea(productAreaId));
- } else if (clusterId != null) {
- processes = getProcessesForTeams(teamService.findByCluster(clusterId));
- }
- if (processes != null) {
- return ResponseEntity.ok(new RestResponsePage<>(distinctByKey(processes, ProcessResponse::getId)));
- }
- return ResponseEntity.badRequest().build();
- }
- private List<ProcessResponse> getProcessesForTeams(List<Team> teams) {
- return teams.parallelStream()
- .map(Team::getId)
- .map(client::getProcessesForTeam)
- .flatMap(Collection::stream)
- .collect(Collectors.toList());
- }
- static class ProcessPage extends RestResponsePage<ProcessResponse> {
- }
- }