Refactor OptionsService

pull/98/head
johnniang 2019-02-20 11:01:17 +08:00
parent 8387f18c7a
commit f2c6ab43f0
7 changed files with 99 additions and 54 deletions

View File

@ -12,7 +12,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
* @author : RYAN0UP
* @date : 2017/11/14
*/
public interface OptionsRepository extends BaseRepository<Options, Long> {
public interface OptionsRepository extends BaseRepository<Options, String> {
/**
* keyoption

View File

@ -1,6 +1,7 @@
package cc.ryanc.halo.service;
import cc.ryanc.halo.model.domain.Options;
import cc.ryanc.halo.service.base.CrudService;
import java.util.Map;
@ -12,7 +13,7 @@ import java.util.Map;
* @author : RYAN0UP
* @date : 2017/11/14
*/
public interface OptionsService {
public interface OptionsService extends CrudService<Options, String> {
/**
*
@ -29,13 +30,6 @@ public interface OptionsService {
*/
void saveOptions(Map<String, String> options);
/**
*
*
* @param options options
*/
void removeOption(Options options);
/**
*
*

View File

@ -153,6 +153,14 @@ public abstract class AbstractCrudService<DOMAIN, ID> implements CrudService<DOM
return domain;
}
@Override
public DOMAIN removeByIdOfNullable(ID id) {
return fetchById(id).map(domain -> {
remove(domain);
return domain;
}).orElse(null);
}
@Override
public void remove(DOMAIN domain) {
Assert.notNull(domain, domainName + " data must not be null");

View File

@ -71,6 +71,9 @@ public interface CrudService<DOMAIN, ID> {
@NonNull
DOMAIN removeById(@NonNull ID id);
@Nullable
DOMAIN removeByIdOfNullable(@NonNull ID id);
void remove(@NonNull DOMAIN domain);
void removeInBatch(@NonNull Collection<ID> ids);

View File

@ -3,8 +3,9 @@ package cc.ryanc.halo.service.impl;
import cc.ryanc.halo.model.domain.Options;
import cc.ryanc.halo.repository.OptionsRepository;
import cc.ryanc.halo.service.OptionsService;
import cc.ryanc.halo.service.base.AbstractCrudService;
import cc.ryanc.halo.utils.ServiceUtils;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
@ -21,11 +22,16 @@ import java.util.Map;
* @date : 2017/11/14
*/
@Service
public class OptionsServiceImpl implements OptionsService {
public class OptionsServiceImpl extends AbstractCrudService<Options, String> implements OptionsService {
private static final String POSTS_CACHE_NAME = "posts";
@Autowired
private OptionsRepository optionsRepository;
private final OptionsRepository optionsRepository;
public OptionsServiceImpl(OptionsRepository optionsRepository) {
super(optionsRepository);
this.optionsRepository = optionsRepository;
}
/**
*
@ -36,7 +42,7 @@ public class OptionsServiceImpl implements OptionsService {
@CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
public void saveOptions(Map<String, String> options) {
if (null != options && !options.isEmpty()) {
options.forEach((k, v) -> saveOption(k, v));
options.forEach(this::saveOption);
}
}
@ -48,36 +54,41 @@ public class OptionsServiceImpl implements OptionsService {
*/
@Override
public void saveOption(String key, String value) {
Options options = null;
if (StrUtil.equals(value, "")) {
options = new Options();
options.setOptionName(key);
this.removeOption(options);
} else {
if (StrUtil.isNotEmpty(key)) {
//如果查询到有该设置选项则做更新操作,反之保存新的设置选项
if (null == optionsRepository.findOptionsByOptionName(key)) {
options = new Options();
options.setOptionName(key);
options.setOptionValue(value);
optionsRepository.save(options);
} else {
options = optionsRepository.findOptionsByOptionName(key);
options.setOptionValue(value);
optionsRepository.save(options);
}
}
}
}
// options = new Options();
// options.setOptionName(key);
// this.remove(options);
/**
*
*
* @param options options
*/
@Override
public void removeOption(Options options) {
optionsRepository.delete(options);
removeByIdOfNullable(key);
} else if (StrUtil.isNotEmpty(key)) {
//如果查询到有该设置选项则做更新操作,反之保存新的设置选项
// if (null == optionsRepository.findOptionsByOptionName(key)) {
// options = new Options();
// options.setOptionName(key);
// options.setOptionValue(value);
// optionsRepository.save(options);
// } else {
// options = optionsRepository.findOptionsByOptionName(key);
// options.setOptionValue(value);
// optionsRepository.save(options);
// }
Options options = fetchById(key).map(option -> {
// Exist
option.setOptionValue(value);
return option;
}).orElseGet(() -> {
// Not exist
Options option = new Options();
option.setOptionName(key);
option.setOptionValue(value);
return option;
});
// Save or update the options
optionsRepository.save(options);
}
}
/**
@ -87,12 +98,14 @@ public class OptionsServiceImpl implements OptionsService {
*/
@Override
public Map<String, String> findAllOptions() {
final Map<String, String> options = new HashMap<>();
final List<Options> optionsList = optionsRepository.findAll();
if (null != optionsList) {
optionsList.forEach(option -> options.put(option.getOptionName(), option.getOptionValue()));
}
return options;
// final Map<String, String> options = new HashMap<>();
// final List<Options> optionsList = optionsRepository.findAll();
// if (null != optionsList) {
// optionsList.forEach(option -> options.put(option.getOptionName(), option.getOptionValue()));
// }
// return options;
return ServiceUtils.convertToMap(listAll(), Options::getOptionName, Options::getOptionValue);
}
/**
@ -103,10 +116,12 @@ public class OptionsServiceImpl implements OptionsService {
*/
@Override
public String findOneOption(String key) {
final Options options = optionsRepository.findOptionsByOptionName(key);
if (null != options) {
return options.getOptionValue();
}
return null;
// final Options options = getNullableById(key);
// if (null != options) {
// return options.getOptionValue();
// }
// return null;
return fetchById(key).map(Options::getOptionValue).orElse(null);
}
}

View File

@ -83,4 +83,29 @@ public class ServiceUtils {
return resultMap;
}
/**
* Converts to map (key from the list data)
*
* @param list data list
* @param keyFunction key mapping function
* @param valueFunction value mapping function
* @param <ID> id type
* @param <D> data type
* @param <V> value type
* @return a map which key from list data and value is data
*/
public static <ID, D, V> Map<ID, V> convertToMap(Collection<D> list, Function<D, ID> keyFunction, Function<D, V> valueFunction) {
Assert.notNull(keyFunction, "mapping function must not be null");
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyMap();
}
Map<ID, V> resultMap = new HashMap<>();
list.forEach(data -> resultMap.putIfAbsent(keyFunction.apply(data), valueFunction.apply(data)));
return resultMap;
}
}

View File

@ -67,7 +67,7 @@ public class OptionController {
log.info("List of saved options: " + options);
return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.save-success"));
} catch (Exception e) {
log.error("Save settings option failed: {}", e.getMessage());
log.error("Save settings option failed: " + e.getMessage(), e);
return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed"));
}
}