diff --git a/src/main/java/run/halo/app/controller/admin/api/OptionController.java b/src/main/java/run/halo/app/controller/admin/api/OptionController.java index 97a1ee554..3ca03900e 100644 --- a/src/main/java/run/halo/app/controller/admin/api/OptionController.java +++ b/src/main/java/run/halo/app/controller/admin/api/OptionController.java @@ -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 listAllWithListView(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, - OptionQuery optionQuery) { + public Page 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 optionMap) { diff --git a/src/main/java/run/halo/app/model/dto/OptionListDTO.java b/src/main/java/run/halo/app/model/dto/OptionSimpleDTO.java similarity index 83% rename from src/main/java/run/halo/app/model/dto/OptionListDTO.java rename to src/main/java/run/halo/app/model/dto/OptionSimpleDTO.java index 03ab4140f..d28e5b3ea 100644 --- a/src/main/java/run/halo/app/model/dto/OptionListDTO.java +++ b/src/main/java/run/halo/app/model/dto/OptionSimpleDTO.java @@ -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; diff --git a/src/main/java/run/halo/app/service/OptionService.java b/src/main/java/run/halo/app/service/OptionService.java index e97cc078c..7f8763425 100755 --- a/src/main/java/run/halo/app/service/OptionService.java +++ b/src/main/java/run/halo/app/service/OptionService.java @@ -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 { void save(@Nullable Map options); /** - * SAve multiple options + * Save multiple options * * @param optionParams option params */ @Transactional void save(@Nullable List 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 { * @param optionQuery optionQuery * @return a page of option output dto */ - Page pageDtosBy(@NonNull Pageable pageable, OptionQuery optionQuery); + Page 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 { * @return an option output dto */ @NonNull - OptionListDTO convertToDto(@NonNull Option option); + OptionSimpleDTO convertToDto(@NonNull Option option); } diff --git a/src/main/java/run/halo/app/service/impl/OptionServiceImpl.java b/src/main/java/run/halo/app/service/impl/OptionServiceImpl.java index 00d367818..4f5c7a79b 100644 --- a/src/main/java/run/halo/app/service/impl/OptionServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/OptionServiceImpl.java @@ -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 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 impl } @Override - public Page pageDtosBy(Pageable pageable, OptionQuery optionQuery) { + public Page pageDtosBy(Pageable pageable, OptionQuery optionQuery) { Assert.notNull(pageable, "Page info must not be null"); Page