NaisTeamController.java
package no.nav.data.team.naisteam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.exceptions.NotFoundException;
import no.nav.data.common.exceptions.ValidationException;
import no.nav.data.common.rest.RestResponsePage;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@Slf4j
@RestController
@RequestMapping("/naisteam")
@Tag(name = "Nais Team", description = "REST API for nais teams")
public class NaisTeamController {
private final NaisConsoleClient naisTeamService;
public NaisTeamController(NaisConsoleClient naisTeamService) {
this.naisTeamService = naisTeamService;
}
@Operation(summary = "Get all teams")
@ApiResponse(description = "NaisTeams fetched")
@GetMapping
public RestResponsePage<NaisTeam> findAll() {
log.info("Received a request for all teams");
return new RestResponsePage<>(naisTeamService.getAllNaisTeams());
}
@Operation(summary = "Get team")
@ApiResponse(description = "NaisTeams fetched")
@GetMapping("/{teamId}")
public ResponseEntity<NaisTeam> getTeamByName(@PathVariable String teamId) {
log.info("Received request for Team with id {}", teamId);
Optional<NaisTeam> team = naisTeamService.getNaisteam(teamId);
if (team.isEmpty()) {
throw new NotFoundException("Couldn't find team " + teamId);
}
return new ResponseEntity<>(team.get(), HttpStatus.OK);
}
@Operation(summary = "Search teams")
@ApiResponse(description = "NaisTeams fetched")
@GetMapping("/search/{name}")
public ResponseEntity<RestResponsePage<NaisTeam>> searchTeamByName(@PathVariable String name) {
log.info("Received request for Team with the name like {}", name);
if (name.length() < 3) {
throw new ValidationException("Search teams must be at least 3 characters");
}
var teams = naisTeamService.searchForNaisTeams(name);
log.info("Returned {} teams", teams.size());
return new ResponseEntity<>(new RestResponsePage<>(teams), HttpStatus.OK);
}
static class TeamPage extends RestResponsePage<NaisTeam> {
}
}