diff --git a/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java b/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java index f8758e478..51e2fed80 100644 --- a/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java +++ b/src/main/java/cc/ryanc/halo/model/dto/post/PostSimpleOutputDTO.java @@ -46,11 +46,6 @@ public class PostSimpleOutputDTO extends PostMinimalOutputDTO { */ private Boolean disallowComment; - /** - * 文章密码 - */ - private String password; - /** * 自定义渲染模板名称 */ diff --git a/src/main/java/cc/ryanc/halo/model/entity/Post.java b/src/main/java/cc/ryanc/halo/model/entity/Post.java index 9f34596e9..34f65ff2b 100644 --- a/src/main/java/cc/ryanc/halo/model/entity/Post.java +++ b/src/main/java/cc/ryanc/halo/model/entity/Post.java @@ -134,6 +134,7 @@ public class Post extends BaseEntity { public void prePersist() { super.prePersist(); id = null; + editTime = getCreateTime(); } } diff --git a/src/main/java/cc/ryanc/halo/repository/PostCategoryRepository.java b/src/main/java/cc/ryanc/halo/repository/PostCategoryRepository.java index 70c1c6ef7..9ed98f8e2 100644 --- a/src/main/java/cc/ryanc/halo/repository/PostCategoryRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/PostCategoryRepository.java @@ -5,7 +5,6 @@ import cc.ryanc.halo.repository.base.BaseRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.lang.NonNull; -import java.util.Collection; import java.util.List; import java.util.Set; @@ -50,8 +49,17 @@ public interface PostCategoryRepository extends BaseRepository findAllByPostId(@NonNull Integer postId); + + /** + * Finds all post categories by category id. + * + * @param categoryId category id must not be null + * @return a list of post category + */ + @NonNull + List findAllByCategoryId(@NonNull Integer categoryId); } diff --git a/src/main/java/cc/ryanc/halo/service/PostCategoryService.java b/src/main/java/cc/ryanc/halo/service/PostCategoryService.java index 0fddc67d8..58ad8d541 100644 --- a/src/main/java/cc/ryanc/halo/service/PostCategoryService.java +++ b/src/main/java/cc/ryanc/halo/service/PostCategoryService.java @@ -55,4 +55,31 @@ public interface PostCategoryService extends CrudService */ @NonNull List mergeOrCreateByIfAbsent(@NonNull Integer postId, Set categoryIds); + + /** + * Lists by post id. + * + * @param postId post id must not be null + * @return a list of post category + */ + @NonNull + List listByPostId(@NonNull Integer postId); + + /** + * Lists by category id. + * + * @param categoryId category id must not be null + * @return a list of post category + */ + @NonNull + List listByCategoryId(@NonNull Integer categoryId); + + /** + * List category id set by post id. + * + * @param postId post id must not be null + * @return a set of category id + */ + @NonNull + Set listCategoryIdsByPostId(@NonNull Integer postId); } diff --git a/src/main/java/cc/ryanc/halo/service/PostTagService.java b/src/main/java/cc/ryanc/halo/service/PostTagService.java index 1736ec7e2..75bf25e3a 100644 --- a/src/main/java/cc/ryanc/halo/service/PostTagService.java +++ b/src/main/java/cc/ryanc/halo/service/PostTagService.java @@ -66,4 +66,31 @@ public interface PostTagService extends CrudService { */ @NonNull List mergeOrCreateByIfAbsent(@NonNull Integer postId, Set tagIds); + + /** + * Lists post tags by post id. + * + * @param postId post id must not be null + * @return a list of post tag + */ + @NonNull + List listByPostId(@NonNull Integer postId); + + /** + * Lists post tags by tag id. + * + * @param tagId tag id must not be null + * @return a list of post tag + */ + @NonNull + List listByTagId(@NonNull Integer tagId); + + /** + * Lists tag id set by post id. + * + * @param postId post id must not be null + * @return a set of tag id + */ + @NonNull + Set listTagIdsByPostId(@NonNull Integer postId); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostCategoryServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostCategoryServiceImpl.java index 90017515f..1ff9f9a68 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/PostCategoryServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostCategoryServiceImpl.java @@ -133,4 +133,25 @@ public class PostCategoryServiceImpl extends AbstractCrudService listByPostId(Integer postId) { + Assert.notNull(postId, "Post id must not be null"); + + return postCategoryRepository.findAllByPostId(postId); + } + + @Override + public List listByCategoryId(Integer categoryId) { + Assert.notNull(categoryId, "Category id must not be null"); + + return postCategoryRepository.findAllByCategoryId(categoryId); + } + + @Override + public Set listCategoryIdsByPostId(Integer postId) { + Assert.notNull(postId, "Post id must not be null"); + + return postCategoryRepository.findAllCategoryIdsByPostId(postId); + } } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java index 77abb001d..75263c4b1 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -14,6 +14,7 @@ import cc.ryanc.halo.model.vo.PostListVO; import cc.ryanc.halo.repository.PostRepository; import cc.ryanc.halo.service.*; import cc.ryanc.halo.service.base.AbstractCrudService; +import cc.ryanc.halo.utils.DateUtils; import cc.ryanc.halo.utils.MarkdownUtils; import cc.ryanc.halo.utils.ServiceUtils; import lombok.extern.slf4j.Slf4j; @@ -25,10 +26,12 @@ import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; import org.springframework.util.Assert; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; /** @@ -175,6 +178,9 @@ public class PostServiceImpl extends AbstractCrudService implemen @Override public PostDetailVO updateBy(Post postToUpdate, Set tagIds, Set categoryIds) { + // Set edit time + postToUpdate.setEditTime(DateUtils.now()); + return createOrUpdate(postToUpdate, tagIds, categoryIds, this::update); } @@ -211,14 +217,10 @@ public class PostServiceImpl extends AbstractCrudService implemen log.debug("Created post categories: [{}]", postCategories); - // Build post detail vo - PostDetailVO postDetailVO = new PostDetailVO().convertFrom(post); - - postDetailVO.setTagIds(ServiceUtils.fetchProperty(postTags, PostTag::getTagId)); - - postDetailVO.setCategoryIds(ServiceUtils.fetchProperty(postCategories, PostCategory::getCategoryId)); - - return postDetailVO; + // Convert to post detail vo + return convertTo(post, + () -> ServiceUtils.fetchProperty(postTags, PostTag::getTagId), + () -> ServiceUtils.fetchProperty(postCategories, PostCategory::getCategoryId)); } /** @@ -235,6 +237,47 @@ public class PostServiceImpl extends AbstractCrudService implemen @Override public PostDetailVO getDetailVoBy(Integer postId) { - return null; + Assert.notNull(postId, "post id must not be null"); + + Post post = getById(postId); + + // Convert to post detail vo + return convertTo(post); + } + + /** + * Convert to post detail vo. + * + * @param post post must not be null + * @return post detail vo + */ + @NonNull + private PostDetailVO convertTo(@NonNull Post post) { + return convertTo(post, + () -> postTagService.listTagIdsByPostId(post.getId()), + () -> postCategoryService.listCategoryIdsByPostId(post.getId())); + } + + /** + * Convert to post detail vo. + * + * @param post post must not be null + * @param tagIdSetSupplier tag id set supplier + * @param categoryIdSetSupplier category id set supplier + * @return post detail vo + */ + @NonNull + private PostDetailVO convertTo(@NonNull Post post, Supplier> tagIdSetSupplier, Supplier> categoryIdSetSupplier) { + Assert.notNull(post, "Post must not be null"); + + PostDetailVO postDetailVO = new PostDetailVO().convertFrom(post); + + // Get post tag ids + postDetailVO.setTagIds(tagIdSetSupplier == null ? Collections.emptySet() : tagIdSetSupplier.get()); + + // Get post category ids + postDetailVO.setCategoryIds(categoryIdSetSupplier == null ? Collections.emptySet() : categoryIdSetSupplier.get()); + + return postDetailVO; } } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostTagServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostTagServiceImpl.java index e72a96fcd..f8e03be14 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/PostTagServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostTagServiceImpl.java @@ -149,4 +149,25 @@ public class PostTagServiceImpl extends AbstractCrudService im // Return post tags return postTags; } + + @Override + public List listByPostId(Integer postId) { + Assert.notNull(postId, "Post id must not be null"); + + return postTagRepository.findAllByPostId(postId); + } + + @Override + public List listByTagId(Integer tagId) { + Assert.notNull(tagId, "Tag id must not be null"); + + return postTagRepository.findAllByTagId(tagId); + } + + @Override + public Set listTagIdsByPostId(Integer postId) { + Assert.notNull(postId, "Post id must not be null"); + + return postTagRepository.findAllTagIdsByPostId(postId); + } }