mirror of https://github.com/halo-dev/halo
Refactor OptionsService
parent
8387f18c7a
commit
f2c6ab43f0
|
@ -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> {
|
||||
|
||||
/**
|
||||
* 根据key查询单个option
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 获取所有设置选项
|
||||
*
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue