diff --git a/src/main/java/com/project/classicpaper/application/ClassicCategoryApplicationService.java b/src/main/java/com/project/classicpaper/application/ClassicCategoryApplicationService.java index 93345ce..bad1d53 100644 --- a/src/main/java/com/project/classicpaper/application/ClassicCategoryApplicationService.java +++ b/src/main/java/com/project/classicpaper/application/ClassicCategoryApplicationService.java @@ -11,5 +11,7 @@ public interface ClassicCategoryApplicationService { Result save(ClassicCategoryDTO dto) throws Exception; + Result rename(Long id, String name) throws Exception; + Result delete(Long id) throws Exception; } diff --git a/src/main/java/com/project/classicpaper/application/impl/ClassicCategoryApplicationServiceImpl.java b/src/main/java/com/project/classicpaper/application/impl/ClassicCategoryApplicationServiceImpl.java index f668ed7..7f81ec6 100644 --- a/src/main/java/com/project/classicpaper/application/impl/ClassicCategoryApplicationServiceImpl.java +++ b/src/main/java/com/project/classicpaper/application/impl/ClassicCategoryApplicationServiceImpl.java @@ -49,7 +49,9 @@ public class ClassicCategoryApplicationServiceImpl implements ClassicCategoryApp Map> paperSetMap = Boolean.TRUE.equals(withPaperSet) ? new HashMap<>() : null; for (ClassicPaperSetEntity set : allPaperSets) { Long catId = set.getClassicCategoryId(); - if (catId == null) continue; + if (catId == null) { + continue; + } countMap.merge(catId, 1, Integer::sum); if (paperSetMap != null) { //按分类ID分组套题组 @@ -163,6 +165,46 @@ public class ClassicCategoryApplicationServiceImpl implements ClassicCategoryApp return Result.success(entity.toDTO(ClassicCategoryDTO::new)); } + @Override + public Result rename(Long id, String name) throws Exception { + // 1. 参数校验 + if (id == null) { + throw new BusinessErrorException("分类ID不能为空"); + } + if (StrUtil.isBlank(name)) { + throw new BusinessErrorException("分类名称不能为空"); + } + if (StrUtil.length(name) > 50) { + throw new BusinessErrorException("分类名称过长"); + } + + // 2. 分类存在性校验 + ClassicCategoryEntity entity = classicCategoryBaseService.getById(id); + if (entity == null) { + throw new BusinessErrorException("分类不存在"); + } + + // 3. 名称未变更则直接返回 + if (StrUtil.equals(entity.getName(), name)) { + return Result.success(entity.toDTO(ClassicCategoryDTO::new)); + } + + // 4. 同父级下重名校验 + LambdaQueryWrapper duplicateQuery = new LambdaQueryWrapper() + .eq(ClassicCategoryEntity::getName, name) + .eq(ClassicCategoryEntity::getParentId, entity.getParentId()) + .ne(ClassicCategoryEntity::getId, id); + if (classicCategoryBaseService.count(duplicateQuery) > 0) { + throw new BusinessErrorException("同级下已存在同名分类"); + } + + // 5. 只更新 name 字段,避免覆盖其他字段 + entity.setName(name); + classicCategoryBaseService.updateById(entity); + + return Result.success(entity.toDTO(ClassicCategoryDTO::new)); + } + @Override public Result delete(Long id) throws Exception { ClassicCategoryEntity category = classicCategoryBaseService.getById(id); diff --git a/src/main/java/com/project/classicpaper/controller/ClassicCategoryController.java b/src/main/java/com/project/classicpaper/controller/ClassicCategoryController.java index 0f15e19..824b997 100644 --- a/src/main/java/com/project/classicpaper/controller/ClassicCategoryController.java +++ b/src/main/java/com/project/classicpaper/controller/ClassicCategoryController.java @@ -31,6 +31,11 @@ public class ClassicCategoryController { return classicCategoryApplicationService.save(dto); } + @PostMapping("/rename") + public Result rename(Long id, String name) throws Exception { + return classicCategoryApplicationService.rename(id, name); + } + @PostMapping("/delete") public Result delete(Long id) throws Exception { return classicCategoryApplicationService.delete(id);