ContactAddressController.java
- package no.nav.data.team.contact;
- 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.RequiredArgsConstructor;
- 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 no.nav.data.team.contact.domain.SlackChannel;
- import no.nav.data.team.contact.domain.SlackUser;
- import no.nav.data.team.contact.dto.ContactAddressResponse;
- import no.nav.data.team.integration.slack.SlackClient;
- import no.nav.data.team.team.TeamService;
- import no.nav.data.team.team.domain.Team;
- 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.UUID;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- @Slf4j
- @RestController
- @RequiredArgsConstructor
- @RequestMapping("/contactaddress")
- @Tag(name = "Contact Address", description = "REST API for Contact Address and slack")
- public class ContactAddressController {
- private final SlackClient slackClient;
- private final TeamService service;
- @Operation(summary = "Get ContactAddress for team")
- @ApiResponse(description = "ok")
- @GetMapping("/team/{id}")
- public ResponseEntity<RestResponsePage<ContactAddressResponse>> getContactAddressesByTeamId(@PathVariable UUID id) {
- log.info("Get ContactAddress Team id={}", id);
- Team team = service.get(id);
- return ResponseEntity.ok(new RestResponsePage<>(team.getContactAddresses()).convert(contactAddress -> contactAddress.toResponse(slackClient)));
- }
- // Slack
- @Operation(summary = "Search slack channels")
- @ApiResponse(description = "Channels fetched")
- @GetMapping("/slack/channel/search/{name}")
- public ResponseEntity<RestResponsePage<SlackChannel>> searchSlackChannel(@PathVariable String name) {
- log.info("Slack channel search '{}'", name);
- validateLen(name);
- var channels = slackClient.searchChannel(name);
- log.info("Returned {} channels", channels.size());
- return new ResponseEntity<>(new RestResponsePage<>(channels), HttpStatus.OK);
- }
- @Operation(summary = "Get slack channel")
- @ApiResponse(description = "Channel fetched")
- @GetMapping("/slack/channel/{id}")
- public ResponseEntity<SlackChannel> getSlackChannel(@PathVariable String id) {
- log.info("Slack channel '{}'", id);
- var channel = slackClient.getChannel(id);
- if (channel == null) {
- throw new NotFoundException("no channel for id " + id);
- }
- return new ResponseEntity<>(channel, HttpStatus.OK);
- }
- @Operation(summary = "Get slack user by email")
- @ApiResponse(description = "User fetched")
- @GetMapping("/slack/user/email/{email}")
- public ResponseEntity<SlackUser> getSlackUserByEmail(@PathVariable String email) {
- log.info("Slack user email '{}'", email);
- var user = slackClient.getUserByEmail(email);
- if (user == null) {
- throw new NotFoundException("no user for email " + email);
- }
- return new ResponseEntity<>(user, HttpStatus.OK);
- }
- @Operation(summary = "Get slack user by id")
- @ApiResponse(description = "User fetched")
- @GetMapping("/slack/user/id/{id}")
- public ResponseEntity<SlackUser> getSlackUserById(@PathVariable String id) {
- log.info("Slack user id '{}'", id);
- var user = slackClient.getUserBySlackId(id);
- if (user == null) {
- throw new NotFoundException("no user for id " + id);
- }
- return new ResponseEntity<>(user, HttpStatus.OK);
- }
- private void validateLen(String name) {
- if (Stream.of(name.split(" ")).sorted().distinct().collect(Collectors.joining("")).length() < 3) {
- throw new ValidationException("Search must be at least 3 characters");
- }
- }
- }