mirror of https://github.com/halo-dev/halo
Complete page by status api
parent
09a91b2692
commit
24a1888247
|
@ -1,10 +1,28 @@
|
|||
package cc.ryanc.halo.repository;
|
||||
|
||||
import cc.ryanc.halo.model.entity.Comment;
|
||||
import cc.ryanc.halo.model.enums.CommentStatus;
|
||||
import cc.ryanc.halo.repository.base.BaseRepository;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* Comment repository.
|
||||
*
|
||||
* @author johnniang
|
||||
* @date 3/21/19
|
||||
*/
|
||||
public interface CommentRepository extends BaseRepository<Comment, Long> {
|
||||
|
||||
/**
|
||||
* Finds all comments by status.
|
||||
*
|
||||
* @param status status must not be null
|
||||
* @param pageable page info must not be null
|
||||
* @return a page of comment
|
||||
*/
|
||||
@NonNull
|
||||
Page<Comment> findAllByStatus(@Nullable CommentStatus status, @NonNull Pageable pageable);
|
||||
}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package cc.ryanc.halo.service;
|
||||
|
||||
import cc.ryanc.halo.model.entity.Comment;
|
||||
import cc.ryanc.halo.model.enums.CommentStatus;
|
||||
import cc.ryanc.halo.model.vo.CommentVO;
|
||||
import cc.ryanc.halo.service.base.CrudService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
/**
|
||||
* Comment service.
|
||||
|
@ -18,5 +21,16 @@ public interface CommentService extends CrudService<Comment, Long> {
|
|||
* @param top top number must not be less than 0
|
||||
* @return a page of comments
|
||||
*/
|
||||
@NonNull
|
||||
Page<CommentVO> pageLatest(int top);
|
||||
|
||||
/**
|
||||
* Pages comments.
|
||||
*
|
||||
* @param status comment status must not be null
|
||||
* @param pageable page info must not be null
|
||||
* @return a page of comment
|
||||
*/
|
||||
@NonNull
|
||||
Page<CommentVO> pageBy(@NonNull CommentStatus status, @NonNull Pageable pageable);
|
||||
}
|
||||
|
|
|
@ -3,20 +3,25 @@ package cc.ryanc.halo.service.impl;
|
|||
import cc.ryanc.halo.model.dto.post.PostMinimalOutputDTO;
|
||||
import cc.ryanc.halo.model.entity.Comment;
|
||||
import cc.ryanc.halo.model.entity.Post;
|
||||
import cc.ryanc.halo.model.enums.CommentStatus;
|
||||
import cc.ryanc.halo.model.vo.CommentVO;
|
||||
import cc.ryanc.halo.repository.CommentRepository;
|
||||
import cc.ryanc.halo.service.CommentService;
|
||||
import cc.ryanc.halo.service.PostService;
|
||||
import cc.ryanc.halo.service.base.AbstractCrudService;
|
||||
import cc.ryanc.halo.utils.ServiceUtils;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.*;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* CommentService implementation class
|
||||
|
@ -45,16 +50,52 @@ public class CommentServiceImpl extends AbstractCrudService<Comment, Long> imple
|
|||
// Build page request
|
||||
PageRequest latestPageable = PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, "createTime"));
|
||||
|
||||
// List all comments
|
||||
Page<Comment> comments = listAll(latestPageable);
|
||||
return convertBy(listAll(latestPageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<CommentVO> pageBy(CommentStatus status, Pageable pageable) {
|
||||
Assert.notNull(status, "Comment status must not be null");
|
||||
Assert.notNull(pageable, "Page info must not be null");
|
||||
|
||||
// Find all
|
||||
Page<Comment> commentPage = commentRepository.findAllByStatus(status, pageable);
|
||||
|
||||
return convertBy(commentPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts to comment vo page.
|
||||
*
|
||||
* @param commentPage comment page must not be null
|
||||
* @return a page of comment vo
|
||||
*/
|
||||
@NonNull
|
||||
private Page<CommentVO> convertBy(@NonNull Page<Comment> commentPage) {
|
||||
Assert.notNull(commentPage, "Comment page must not be null");
|
||||
|
||||
return new PageImpl<>(convertBy(commentPage.getContent()), commentPage.getPageable(), commentPage.getTotalElements());
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts to comment vo list.
|
||||
*
|
||||
* @param comments comment list
|
||||
* @return a list of comment vo
|
||||
*/
|
||||
@NonNull
|
||||
private List<CommentVO> convertBy(@Nullable List<Comment> comments) {
|
||||
if (CollectionUtils.isEmpty(comments)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// Fetch goods ids
|
||||
Set<Integer> postIds = ServiceUtils.fetchProperty(comments.getContent(), Comment::getPostId);
|
||||
Set<Integer> postIds = ServiceUtils.fetchProperty(comments, Comment::getPostId);
|
||||
|
||||
// Get all posts
|
||||
Map<Integer, Post> postMap = ServiceUtils.convertToMap(postService.listAllByIds(postIds), Post::getId);
|
||||
|
||||
return comments.map(comment -> {
|
||||
return comments.stream().map(comment -> {
|
||||
// Convert to vo
|
||||
CommentVO commentVO = new CommentVO().convertFrom(comment);
|
||||
|
||||
|
@ -62,6 +103,6 @@ public class CommentServiceImpl extends AbstractCrudService<Comment, Long> imple
|
|||
commentVO.setPost(new PostMinimalOutputDTO().convertFrom(postMap.get(comment.getPostId())));
|
||||
|
||||
return commentVO;
|
||||
});
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
package cc.ryanc.halo.web.controller.admin.api;
|
||||
|
||||
import cc.ryanc.halo.model.enums.CommentStatus;
|
||||
import cc.ryanc.halo.model.vo.CommentVO;
|
||||
import cc.ryanc.halo.service.CommentService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.web.PageableDefault;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.springframework.data.domain.Sort.Direction.DESC;
|
||||
|
||||
/**
|
||||
* Comment controller.
|
||||
*
|
||||
|
@ -31,4 +34,10 @@ public class CommentController {
|
|||
public List<CommentVO> pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) {
|
||||
return commentService.pageLatest(top).getContent();
|
||||
}
|
||||
|
||||
@GetMapping("status/{status}")
|
||||
public Page<CommentVO> pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable,
|
||||
@PathVariable("status") CommentStatus status) {
|
||||
return commentService.pageBy(status, pageable);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue