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> {
}
}