SharingsController.java

package se.jobtechdev.personaldatagateway.api.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.request.NativeWebRequest;
import se.jobtechdev.personaldatagateway.api.generated.api.SharingsApi;
import se.jobtechdev.personaldatagateway.api.generated.model.Sharing;
import se.jobtechdev.personaldatagateway.api.service.SharingService;
import se.jobtechdev.personaldatagateway.api.util.LinkHeaderUtil;
import se.jobtechdev.personaldatagateway.api.util.ResponseFactory;

import java.util.UUID;

import static se.jobtechdev.personaldatagateway.api.util.ControllerUtil.throwApiExceptionOnAbsentValue;

@Controller
public class SharingsController implements SharingsApi {
  private final String baseUrl;

  private final NativeWebRequest request;

  private final SharingService sharingService;

  public SharingsController(
      @Value("${pdg-api.base-url}") String baseUrl,
      NativeWebRequest request,
      SharingService sharingService) {
    this.baseUrl = baseUrl;
    this.request = request;
    this.sharingService = sharingService;
  }

  @Override
  public ResponseEntity<Sharing> getSharing(UUID sharingId) {
    final var sharing =
        throwApiExceptionOnAbsentValue(
            sharingService.getSharingById(sharingId),
            HttpStatus.NOT_FOUND,
            String.format(
                "Failed to handle GET sharing request - Could not find sharing with id: %s",
                sharingId));

    final var response = ResponseFactory.createSharing(sharing);

    final var headers = LinkHeaderUtil.createHeaders(new Class<?>[]{UUID.class}, sharingId);

    return ResponseEntity.status(HttpStatus.OK)
        .contentType(MediaType.APPLICATION_JSON)
        .headers(headers)
        .body(response);
  }
}