HealthController.java

package se.jobtechdev.personaldatagateway.api.controller;

import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import se.jobtechdev.personaldatagateway.api.Main;
import se.jobtechdev.personaldatagateway.api.generated.api.HealthApi;
import se.jobtechdev.personaldatagateway.api.generated.model.CheckStatus;
import se.jobtechdev.personaldatagateway.api.generated.model.Health;
import se.jobtechdev.personaldatagateway.api.generated.model.HealthChecks;
import se.jobtechdev.personaldatagateway.api.generated.model.Status;
import se.jobtechdev.personaldatagateway.api.util.LinkHeaderUtil;
import se.jobtechdev.personaldatagateway.api.util.ResponseFactory;

@Primary
@Controller
public class HealthController implements HealthApi {
  @Override
  @CrossOrigin(origins = "*")
  public ResponseEntity<Health> health() {
    final var liveness = new CheckStatus(Status.UP);
    final var readiness = new CheckStatus(Main.isStarted() ? Status.UP : Status.DOWN);

    final var checks = new HealthChecks(liveness, readiness);
    final var response = ResponseFactory.createHealth(Status.UP, checks);

    final var readinessStatus = (Main.isStarted()) ? HttpStatus.OK : HttpStatus.SERVICE_UNAVAILABLE;

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

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