ConfigurationController.java
/*
* Copyright (C) 2023 B3Partners B.V.
*
* SPDX-License-Identifier: MIT
*/
package org.tailormap.api.controller;
import io.micrometer.core.annotation.Counted;
import io.micrometer.core.annotation.Timed;
import java.io.Serializable;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.server.ResponseStatusException;
import org.tailormap.api.annotation.AppRestController;
import org.tailormap.api.persistence.Configuration;
import org.tailormap.api.repository.ConfigurationRepository;
import org.tailormap.api.viewer.model.ConfigResponse;
/** Provides global configuration values which are available to viewers */
@AppRestController
public class ConfigurationController {
private final ConfigurationRepository configurationRepository;
public ConfigurationController(ConfigurationRepository configurationRepository) {
this.configurationRepository = configurationRepository;
}
@GetMapping(path = "${tailormap-api.base-path}/config/{key}", produces = MediaType.APPLICATION_JSON_VALUE)
@Timed(value = "get_config_key", description = "Get configuration value")
@Counted(value = "get_config_key", description = "Count of get configuration value")
public ResponseEntity<Serializable> getConfig(@PathVariable String key) {
Configuration config = configurationRepository
.getAvailableForViewer(key)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
ConfigResponse response = new ConfigResponse();
response.setKey(key);
response.setValue(config.getValue());
response.setObject(config.getJsonValue());
return ResponseEntity.status(HttpStatus.OK).body(response);
}
}