feat: add some api for option.

pull/755/head
ruibaby 2019-12-03 12:35:23 +08:00
parent 3676a77be2
commit bc06a49651
4 changed files with 87 additions and 12 deletions

View File

@ -7,7 +7,8 @@ import org.springframework.data.web.PageableDefault;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import run.halo.app.model.dto.OptionDTO;
import run.halo.app.model.dto.OptionListDTO;
import run.halo.app.model.dto.OptionSimpleDTO;
import run.halo.app.model.entity.Option;
import run.halo.app.model.params.OptionParam;
import run.halo.app.model.params.OptionQuery;
import run.halo.app.service.OptionService;
@ -57,11 +58,37 @@ public class OptionController {
@GetMapping("list_view")
@ApiOperation("Lists all options with list view")
public Page<OptionListDTO> listAllWithListView(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable,
OptionQuery optionQuery) {
public Page<OptionSimpleDTO> listAllWithListView(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable,
OptionQuery optionQuery) {
return optionService.pageDtosBy(pageable, optionQuery);
}
@GetMapping("{id:\\d+}")
@ApiOperation("Get option detail by id")
public OptionSimpleDTO getBy(@PathVariable("id") Integer id) {
Option option = optionService.getById(id);
return optionService.convertToDto(option);
}
@PostMapping
@ApiOperation("Creates option")
public void createBy(@RequestBody @Valid OptionParam optionParam) {
optionService.save(optionParam);
}
@PutMapping("{optionId:\\d+}")
@ApiOperation("Updates option")
public void updateBy(@PathVariable("optionId") Integer optionId,
@RequestBody @Valid OptionParam optionParam) {
optionService.update(optionId, optionParam);
}
@DeleteMapping("{optionId:\\d+}")
@ApiOperation("Deletes option")
public void deletePermanently(@PathVariable("optionId") Integer optionId) {
optionService.removePermanently(optionId);
}
@PostMapping("map_view/saving")
@ApiOperation("Saves options by option map")
public void saveOptionsWithMapView(@RequestBody Map<String, Object> optionMap) {

View File

@ -14,7 +14,9 @@ import java.util.Date;
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class OptionListDTO extends OptionDTO {
public class OptionSimpleDTO extends OptionDTO {
private Integer id;
private OptionType type;

View File

@ -8,7 +8,7 @@ import org.springframework.lang.Nullable;
import org.springframework.transaction.annotation.Transactional;
import run.halo.app.exception.MissingPropertyException;
import run.halo.app.model.dto.OptionDTO;
import run.halo.app.model.dto.OptionListDTO;
import run.halo.app.model.dto.OptionSimpleDTO;
import run.halo.app.model.entity.Option;
import run.halo.app.model.enums.ValueEnum;
import run.halo.app.model.params.OptionParam;
@ -46,13 +46,28 @@ public interface OptionService extends CrudService<Option, Integer> {
void save(@Nullable Map<String, Object> options);
/**
* SAve multiple options
* Save multiple options
*
* @param optionParams option params
*/
@Transactional
void save(@Nullable List<OptionParam> optionParams);
/**
* Save single option.
*
* @param optionParam option param
*/
void save(@Nullable OptionParam optionParam);
/**
* Update option by id.
*
* @param optionId option id must not be null.
* @param optionParam option param must not be null.
*/
void update(@NonNull Integer optionId, @NonNull OptionParam optionParam);
/**
* Saves a property.
*
@ -103,7 +118,16 @@ public interface OptionService extends CrudService<Option, Integer> {
* @param optionQuery optionQuery
* @return a page of option output dto
*/
Page<OptionListDTO> pageDtosBy(@NonNull Pageable pageable, OptionQuery optionQuery);
Page<OptionSimpleDTO> pageDtosBy(@NonNull Pageable pageable, OptionQuery optionQuery);
/**
* Removes option permanently.
*
* @param id option id must not be null
* @return option detail deleted
*/
@NonNull
Option removePermanently(@NonNull Integer id);
/**
* Get option by key
@ -321,5 +345,5 @@ public interface OptionService extends CrudService<Option, Integer> {
* @return an option output dto
*/
@NonNull
OptionListDTO convertToDto(@NonNull Option option);
OptionSimpleDTO convertToDto(@NonNull Option option);
}

View File

@ -20,7 +20,7 @@ import run.halo.app.config.properties.HaloProperties;
import run.halo.app.event.options.OptionUpdatedEvent;
import run.halo.app.exception.MissingPropertyException;
import run.halo.app.model.dto.OptionDTO;
import run.halo.app.model.dto.OptionListDTO;
import run.halo.app.model.dto.OptionSimpleDTO;
import run.halo.app.model.entity.Option;
import run.halo.app.model.enums.ValueEnum;
import run.halo.app.model.params.OptionParam;
@ -130,6 +130,21 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
save(optionMap);
}
@Override
public void save(OptionParam optionParam) {
Option option = optionParam.convertTo();
create(option);
publishOptionUpdatedEvent();
}
@Override
public void update(Integer optionId, OptionParam optionParam) {
Option optionToUpdate = getById(optionId);
optionParam.update(optionToUpdate);
update(optionToUpdate);
publishOptionUpdatedEvent();
}
@Override
public void saveProperty(PropertyEnum property, String value) {
Assert.notNull(property, "Property must not be null");
@ -221,7 +236,7 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
}
@Override
public Page<OptionListDTO> pageDtosBy(Pageable pageable, OptionQuery optionQuery) {
public Page<OptionSimpleDTO> pageDtosBy(Pageable pageable, OptionQuery optionQuery) {
Assert.notNull(pageable, "Page info must not be null");
Page<Option> optionPage = optionRepository.findAll(buildSpecByQuery(optionQuery), pageable);
@ -229,6 +244,13 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
return optionPage.map(this::convertToDto);
}
@Override
public Option removePermanently(Integer id) {
Option deletedOption = removeById(id);
publishOptionUpdatedEvent();
return deletedOption;
}
@NonNull
private Specification<Option> buildSpecByQuery(@NonNull OptionQuery optionQuery) {
Assert.notNull(optionQuery, "Option query must not be null");
@ -439,10 +461,10 @@ public class OptionServiceImpl extends AbstractCrudService<Option, Integer> impl
}
@Override
public OptionListDTO convertToDto(Option option) {
public OptionSimpleDTO convertToDto(Option option) {
Assert.notNull(option, "Option must not be null");
return new OptionListDTO().convertFrom(option);
return new OptionSimpleDTO().convertFrom(option);
}
private void cleanCache() {