ChangeLogService.java
package io.featureprobe.api.service;
import io.featureprobe.api.dao.entity.PublishMessage;
import io.featureprobe.api.dao.entity.Dictionary;
import io.featureprobe.api.dao.entity.Environment;
import io.featureprobe.api.dao.exception.ResourceNotFoundException;
import io.featureprobe.api.dao.repository.PublishMessageRepository;
import io.featureprobe.api.dao.repository.DictionaryRepository;
import io.featureprobe.api.dao.repository.EnvironmentRepository;
import io.featureprobe.api.base.db.ExcludeTenant;
import io.featureprobe.api.base.enums.ChangeLogType;
import io.featureprobe.api.base.enums.ResourceType;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@AllArgsConstructor
@ExcludeTenant
public class ChangeLogService {
private PublishMessageRepository publishMessageRepository;
private EnvironmentRepository environmentRepository;
private DictionaryRepository dictionaryRepository;
private static final String SDK_KEY_MAP_VERSION_DICT_KEY = "all_sdk_key_map";
@Transactional(rollbackFor = Exception.class)
public void create(Environment environment, ChangeLogType type) {
switch (type) {
case ADD:
case DELETE:
Dictionary dictionary = dictionaryRepository.findByKey(SDK_KEY_MAP_VERSION_DICT_KEY)
.orElseThrow(() -> new ResourceNotFoundException(ResourceType.DICTIONARY,
SDK_KEY_MAP_VERSION_DICT_KEY));
dictionary.setValue(String.valueOf(Long.parseLong(dictionary.getValue()) + 1));
dictionaryRepository.save(dictionary);
break;
case CHANGE:
environment.setVersion(environment.getVersion() + 1);
environmentRepository.save(environment);
break;
default:
break;
}
PublishMessage publishMessage = new PublishMessage();
publishMessage.setClientSdkKey(environment.getClientSdkKey());
publishMessage.setServerSdkKey(environment.getServerSdkKey());
publishMessage.setType(type);
publishMessageRepository.save(publishMessage);
}
}