SettingsService.java
package no.nav.data.team.settings;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import lombok.RequiredArgsConstructor;
import no.nav.data.common.storage.domain.GenericStorage;
import no.nav.data.common.storage.domain.GenericStorageRepository;
import no.nav.data.common.storage.domain.TypeRegistration;
import no.nav.data.common.utils.JsonUtils;
import no.nav.data.common.validator.Validator;
import no.nav.data.team.settings.dto.Settings;
import org.springframework.stereotype.Service;
import tools.jackson.databind.node.JsonNodeFactory;
import java.time.Duration;
import java.util.UUID;
@Service
@RequiredArgsConstructor
public class SettingsService {
private static final String SETTINGS = TypeRegistration.typeOf(Settings.class);
private final GenericStorageRepository repository;
private final LoadingCache<String, Settings> cache = Caffeine.newBuilder()
.expireAfterWrite(Duration.ofMinutes(1))
.build(k -> getSettings());
public Settings getSettings() {
return findSettings().getDomainObjectData(Settings.class);
}
public Settings getSettingsCached() {
return cache.get("singleton");
}
public Settings updateSettings(Settings settings) {
Validator.validate(settings);
GenericStorage settingsStorage = findSettings();
settingsStorage.setData(JsonUtils.toJsonNode(settings));
Settings updated = repository.save(settingsStorage).getDomainObjectData(Settings.class);
cache.put("singleton", updated);
return updated;
}
private GenericStorage findSettings() {
return repository.findByType(SETTINGS).orElseGet(this::createSettings);
}
private GenericStorage createSettings() {
return repository.save(new GenericStorage(UUID.randomUUID(), SETTINGS, JsonNodeFactory.instance.objectNode()));
}
}