diff --git a/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java b/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java index 9f95646a5..f8023fb6c 100644 --- a/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java +++ b/application/src/main/java/run/halo/app/theme/finders/CategoryFinder.java @@ -28,4 +28,6 @@ public interface CategoryFinder { Flux listAsTree(); Flux listAsTree(String name); + + Mono getParentByName(String name); } diff --git a/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java b/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java index 07a89f9c2..43502d798 100644 --- a/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java +++ b/application/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java @@ -81,6 +81,23 @@ public class CategoryFinderImpl implements CategoryFinder { return this.toCategoryTreeVoFlux(name); } + @Override + public Mono getParentByName(String name) { + if (StringUtils.isBlank(name)) { + return Mono.empty(); + } + return client.list(Category.class, + category -> { + List children = category.getSpec().getChildren(); + if (children == null) { + return false; + } + return children.contains(name); + }, + defaultComparator()) + .next().map(CategoryVo::from); + } + Flux toCategoryTreeVoFlux(String name) { return listAll() .collectList()