diff --git a/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/dict/SysDictHandler.java b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/dict/SysDictHandler.java new file mode 100644 index 0000000..2f36e81 --- /dev/null +++ b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/handler/dict/SysDictHandler.java @@ -0,0 +1,114 @@ +package cn.novalon.manage.sys.handler.dict; + +import cn.novalon.manage.sys.core.domain.SysDictType; +import cn.novalon.manage.sys.core.domain.SysDictData; +import cn.novalon.manage.sys.core.service.ISysDictTypeService; +import cn.novalon.manage.sys.core.service.ISysDictDataService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequestMapping("/api/dict") +public class SysDictHandler { + + private final ISysDictTypeService dictTypeService; + private final ISysDictDataService dictDataService; + + public SysDictHandler(ISysDictTypeService dictTypeService, ISysDictDataService dictDataService) { + this.dictTypeService = dictTypeService; + this.dictDataService = dictDataService; + } + + @GetMapping("/types") + public Flux getAllDictTypes() { + return dictTypeService.findAll(); + } + + @GetMapping("/types/{id}") + public Mono> getDictTypeById(@PathVariable Long id) { + return dictTypeService.findById(id) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @GetMapping("/types/type/{dictType}") + public Mono> getDictTypeByType(@PathVariable String dictType) { + return dictTypeService.findByDictType(dictType) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @PostMapping("/types") + public Mono> createDictType(@RequestBody SysDictType dictType) { + return dictTypeService.save(dictType) + .map(dt -> ResponseEntity.status(HttpStatus.CREATED).body(dt)); + } + + @PutMapping("/types/{id}") + public Mono> updateDictType(@PathVariable Long id, @RequestBody SysDictType dictType) { + return dictTypeService.findById(id) + .flatMap(existing -> { + existing.setDictName(dictType.getDictName()); + existing.setStatus(dictType.getStatus()); + existing.setRemark(dictType.getRemark()); + return dictTypeService.save(existing); + }) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @DeleteMapping("/types/{id}") + public Mono> deleteDictType(@PathVariable Long id) { + return dictTypeService.deleteById(id) + .then(Mono.just(ResponseEntity.noContent().build())); + } + + @GetMapping("/data") + public Flux getAllDictData() { + return dictDataService.findAll(); + } + + @GetMapping("/data/{id}") + public Mono> getDictDataById(@PathVariable Long id) { + return dictDataService.findById(id) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @GetMapping("/data/type/{dictType}") + public Flux getDictDataByType(@PathVariable String dictType) { + return dictDataService.findByDictType(dictType); + } + + @PostMapping("/data") + public Mono> createDictData(@RequestBody SysDictData dictData) { + return dictDataService.save(dictData) + .map(dd -> ResponseEntity.status(HttpStatus.CREATED).body(dd)); + } + + @PutMapping("/data/{id}") + public Mono> updateDictData(@PathVariable Long id, @RequestBody SysDictData dictData) { + return dictDataService.findById(id) + .flatMap(existing -> { + existing.setDictLabel(dictData.getDictLabel()); + existing.setDictValue(dictData.getDictValue()); + existing.setDictSort(dictData.getDictSort()); + existing.setCssClass(dictData.getCssClass()); + existing.setListClass(dictData.getListClass()); + existing.setIsDefault(dictData.getIsDefault()); + existing.setStatus(dictData.getStatus()); + return dictDataService.save(existing); + }) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @DeleteMapping("/data/{id}") + public Mono> deleteDictData(@PathVariable Long id) { + return dictDataService.deleteById(id) + .then(Mono.just(ResponseEntity.noContent().build())); + } +}