diff --git a/src/main/java/run/halo/app/controller/admin/api/RecoveryController.java b/src/main/java/run/halo/app/controller/admin/api/RecoveryController.java index c425d4f41..228f8fd61 100644 --- a/src/main/java/run/halo/app/controller/admin/api/RecoveryController.java +++ b/src/main/java/run/halo/app/controller/admin/api/RecoveryController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import run.halo.app.cache.lock.CacheLock; import run.halo.app.exception.BadRequestException; import run.halo.app.model.properties.PrimaryProperties; import run.halo.app.service.OptionService; @@ -34,6 +35,7 @@ public class RecoveryController { @PostMapping("migrations/v0_4_3") @ApiOperation("Migrates from halo v0.4.3") + @CacheLock public void migrateFromVersion_0_4_3( @ApiParam("This file content type should be json") @RequestPart("file") MultipartFile file) { diff --git a/src/main/java/run/halo/app/service/base/BaseCommentService.java b/src/main/java/run/halo/app/service/base/BaseCommentService.java index 7ea29e89b..6c53b6db2 100644 --- a/src/main/java/run/halo/app/service/base/BaseCommentService.java +++ b/src/main/java/run/halo/app/service/base/BaseCommentService.java @@ -29,6 +29,7 @@ public interface BaseCommentService extends CrudSer * %s: parent commentator author name * %s: comment content */ + @Deprecated String COMMENT_TEMPLATE = "@%s %s"; /** @@ -157,7 +158,7 @@ public interface BaseCommentService extends CrudSer /** * Target must exist. * - * @param targetId target id must not be null + * @param targetId target id must not be null (post id, sheet id or journal id) */ void targetMustExist(@NonNull Integer targetId); } diff --git a/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java b/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java index ef23dad65..4c079cbbc 100644 --- a/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/BaseCommentServiceImpl.java @@ -105,17 +105,10 @@ public abstract class BaseCommentServiceImpl extend // List all the top comments (Caution: This list will be cleared) List comments = baseCommentRepository.findAllByPostIdAndStatus(postId, CommentStatus.PUBLISHED); - // Init the top virtual comment - BaseCommentVO topVirtualComment = new BaseCommentVO(); - topVirtualComment.setId(0L); - topVirtualComment.setChildren(new LinkedList<>()); - Comparator commentVOComparator = buildCommentComparator(pageable.getSortOr(Sort.by(Sort.Direction.DESC, "createTime"))); - // Concrete the comment tree - concreteTree(topVirtualComment, new LinkedList<>(comments), commentVOComparator); - - List topComments = topVirtualComment.getChildren(); + // Convert to vo + List topComments = convertToVo(comments, commentVOComparator); List pageContent; @@ -370,6 +363,30 @@ public abstract class BaseCommentServiceImpl extend }; } + /** + * Converts to base comment vo tree. + * + * @param comments comments list could be null + * @param comparator comment comparator could be null + * @return a comment vo tree + */ + @NonNull + protected List convertToVo(@Nullable List comments, @Nullable Comparator comparator) { + if (CollectionUtils.isEmpty(comments)) { + return Collections.emptyList(); + } + + // Init the top virtual comment + BaseCommentVO topVirtualComment = new BaseCommentVO(); + topVirtualComment.setId(0L); + topVirtualComment.setChildren(new LinkedList<>()); + + // Concrete the comment tree + concreteTree(topVirtualComment, new LinkedList<>(comments), comparator); + + return topVirtualComment.getChildren(); + } + /** * Concretes comment tree. * @@ -379,9 +396,8 @@ public abstract class BaseCommentServiceImpl extend */ protected void concreteTree(@NonNull BaseCommentVO parentComment, @Nullable Collection comments, - @NonNull Comparator commentComparator) { + @Nullable Comparator commentComparator) { Assert.notNull(parentComment, "Parent comment must not be null"); - Assert.notNull(commentComparator, "Comment comparator must not be null"); if (CollectionUtils.isEmpty(comments)) { return; @@ -419,7 +435,9 @@ public abstract class BaseCommentServiceImpl extend // Recursively concrete the children parentComment.getChildren().forEach(childComment -> concreteTree(childComment, comments, commentComparator)); // Sort the children - parentComment.getChildren().sort(commentComparator); + if (commentComparator != null) { + parentComment.getChildren().sort(commentComparator); + } } }