mirror of https://github.com/halo-dev/halo
feat: support post metas
parent
a3bffe67a7
commit
7cc3c787cb
|
@ -13,7 +13,9 @@ import run.halo.app.cache.StringCacheStore;
|
|||
import run.halo.app.model.dto.post.BasePostMinimalDTO;
|
||||
import run.halo.app.model.dto.post.BasePostSimpleDTO;
|
||||
import run.halo.app.model.entity.Post;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.params.PostMetaParam;
|
||||
import run.halo.app.model.params.PostParam;
|
||||
import run.halo.app.model.params.PostQuery;
|
||||
import run.halo.app.model.vo.PostDetailVO;
|
||||
|
@ -102,8 +104,7 @@ public class PostController {
|
|||
@RequestParam(value = "autoSave", required = false, defaultValue = "false") Boolean autoSave) {
|
||||
// Convert to
|
||||
Post post = postParam.convertTo();
|
||||
|
||||
return postService.createBy(post, postParam.getTagIds(), postParam.getCategoryIds(), autoSave);
|
||||
return postService.createBy(post, postParam.getTagIds(), postParam.getCategoryIds(), postParam.getPostMetas(), autoSave);
|
||||
}
|
||||
|
||||
@PutMapping("{postId:\\d+}")
|
||||
|
@ -114,8 +115,7 @@ public class PostController {
|
|||
Post postToUpdate = postService.getById(postId);
|
||||
|
||||
postParam.update(postToUpdate);
|
||||
|
||||
return postService.updateBy(postToUpdate, postParam.getTagIds(), postParam.getCategoryIds(), autoSave);
|
||||
return postService.updateBy(postToUpdate, postParam.getTagIds(), postParam.getCategoryIds(), postParam.getPostMetas(), autoSave);
|
||||
}
|
||||
|
||||
@PutMapping("{postId:\\d+}/status/{status}")
|
||||
|
|
|
@ -16,6 +16,7 @@ import run.halo.app.cache.lock.CacheLock;
|
|||
import run.halo.app.exception.ForbiddenException;
|
||||
import run.halo.app.model.entity.Category;
|
||||
import run.halo.app.model.entity.Post;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.model.entity.Tag;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.vo.BaseCommentVO;
|
||||
|
@ -46,6 +47,8 @@ public class ContentArchiveController {
|
|||
|
||||
private final PostCategoryService postCategoryService;
|
||||
|
||||
private final PostMetaService postMetaService;
|
||||
|
||||
private final PostTagService postTagService;
|
||||
|
||||
private final PostCommentService postCommentService;
|
||||
|
@ -57,6 +60,7 @@ public class ContentArchiveController {
|
|||
public ContentArchiveController(PostService postService,
|
||||
ThemeService themeService,
|
||||
PostCategoryService postCategoryService,
|
||||
PostMetaService postMetaService,
|
||||
PostTagService postTagService,
|
||||
PostCommentService postCommentService,
|
||||
OptionService optionService,
|
||||
|
@ -64,6 +68,7 @@ public class ContentArchiveController {
|
|||
this.postService = postService;
|
||||
this.themeService = themeService;
|
||||
this.postCategoryService = postCategoryService;
|
||||
this.postMetaService = postMetaService;
|
||||
this.postTagService = postTagService;
|
||||
this.postCommentService = postCommentService;
|
||||
this.optionService = optionService;
|
||||
|
@ -157,12 +162,14 @@ public class ContentArchiveController {
|
|||
|
||||
List<Category> categories = postCategoryService.listCategoriesBy(post.getId());
|
||||
List<Tag> tags = postTagService.listTagsBy(post.getId());
|
||||
List<PostMeta> postMetas = postMetaService.listPostMetasBy(post.getId());
|
||||
|
||||
Page<BaseCommentVO> comments = postCommentService.pageVosBy(post.getId(), PageRequest.of(cp, optionService.getCommentPageSize(), sort));
|
||||
|
||||
model.addAttribute("is_post", true);
|
||||
model.addAttribute("post", postService.convertToDetailVo(post));
|
||||
model.addAttribute("categories", categories);
|
||||
model.addAttribute("postMetas", postMetas);
|
||||
model.addAttribute("tags", tags);
|
||||
model.addAttribute("comments", comments);
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public class StartedListener implements ApplicationListener<ApplicationStartedEv
|
|||
String blogUrl = optionService.getBlogBaseUrl();
|
||||
|
||||
log.info("Halo started at {}", blogUrl);
|
||||
log.info("Halo admin started at {}{}", blogUrl, haloProperties.getAdminPath());
|
||||
log.info("Halo admin started at {}/{}", blogUrl, haloProperties.getAdminPath());
|
||||
if (!haloProperties.isDocDisabled()) {
|
||||
log.debug("Halo api doc was enabled at {}/swagger-ui.html", blogUrl);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package run.halo.app.model.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import run.halo.app.model.dto.base.OutputConverter;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Post meta output dto.
|
||||
* @author guqing
|
||||
* @date 2019-11-30
|
||||
*/
|
||||
@Data
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
public class PostMetaDTO implements OutputConverter<PostMetaDTO, PostMeta> {
|
||||
private Long id;
|
||||
|
||||
private Integer postId;
|
||||
|
||||
private String key;
|
||||
|
||||
private String value;
|
||||
|
||||
private Date createTime;
|
||||
}
|
|
@ -2,8 +2,10 @@ package run.halo.app.model.params;
|
|||
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import run.halo.app.model.dto.base.InputConverter;
|
||||
import run.halo.app.model.entity.Post;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.model.enums.PostCreateFrom;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.utils.SlugUtils;
|
||||
|
@ -12,6 +14,7 @@ import javax.validation.constraints.Min;
|
|||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
|
@ -59,6 +62,8 @@ public class PostParam implements InputConverter<Post> {
|
|||
|
||||
private Set<Integer> categoryIds;
|
||||
|
||||
private Set<PostMetaParam> postMetas;
|
||||
|
||||
@Override
|
||||
public Post convertTo() {
|
||||
url = StringUtils.isBlank(url) ? SlugUtils.slug(title) : SlugUtils.slug(url);
|
||||
|
@ -80,4 +85,17 @@ public class PostParam implements InputConverter<Post> {
|
|||
|
||||
InputConverter.super.update(post);
|
||||
}
|
||||
|
||||
public Set<PostMeta> getPostMetas() {
|
||||
Set<PostMeta> postMetaSet = new HashSet<>();
|
||||
if(CollectionUtils.isEmpty(postMetas)) {
|
||||
return postMetaSet;
|
||||
}
|
||||
|
||||
for(PostMetaParam postMetaParam : postMetas) {
|
||||
PostMeta postMeta = postMetaParam.convertTo();
|
||||
postMetaSet.add(postMeta);
|
||||
}
|
||||
return postMetaSet;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,9 +4,11 @@ import lombok.Data;
|
|||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import run.halo.app.model.dto.CategoryDTO;
|
||||
import run.halo.app.model.dto.PostMetaDTO;
|
||||
import run.halo.app.model.dto.TagDTO;
|
||||
import run.halo.app.model.dto.post.BasePostDetailDTO;
|
||||
import run.halo.app.model.entity.Category;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.model.entity.Tag;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -30,5 +32,9 @@ public class PostDetailVO extends BasePostDetailDTO {
|
|||
private Set<Integer> categoryIds;
|
||||
|
||||
private List<CategoryDTO> categories;
|
||||
|
||||
private Set<Long> postMetaIds;
|
||||
|
||||
private List<PostMetaDTO> postMetas;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,8 +3,10 @@ package run.halo.app.model.vo;
|
|||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import run.halo.app.model.dto.CategoryDTO;
|
||||
import run.halo.app.model.dto.PostMetaDTO;
|
||||
import run.halo.app.model.dto.TagDTO;
|
||||
import run.halo.app.model.dto.post.BasePostSimpleDTO;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -24,4 +26,5 @@ public class PostListVO extends BasePostSimpleDTO {
|
|||
|
||||
private List<CategoryDTO> categories;
|
||||
|
||||
private List<PostMetaDTO> postMetas;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
package run.halo.app.repository;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.repository.base.BaseMetaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* PostMeta repository.
|
||||
*
|
||||
|
@ -11,4 +15,21 @@ import run.halo.app.repository.base.BaseMetaRepository;
|
|||
* @date 2019-08-04
|
||||
*/
|
||||
public interface PostMetaRepository extends BaseMetaRepository<PostMeta> {
|
||||
|
||||
/**
|
||||
* Deletes post metas by post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @return a list of post meta deleted
|
||||
*/
|
||||
@NonNull
|
||||
List<PostMeta> deleteByPostId(@NonNull Integer postId);
|
||||
|
||||
/**
|
||||
* Finds all post metas by post id.
|
||||
* @param postIds post id must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
@NonNull
|
||||
List<PostMeta> findAllByPostIdIn(@NonNull Set<Integer> postIds);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
package run.halo.app.service;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.Nullable;
|
||||
import run.halo.app.model.dto.PostMetaDTO;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.service.base.BaseMetaService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Post meta service interface.
|
||||
*
|
||||
|
@ -11,4 +18,17 @@ import run.halo.app.service.base.BaseMetaService;
|
|||
* @date 2019-08-04
|
||||
*/
|
||||
public interface PostMetaService extends BaseMetaService<PostMeta> {
|
||||
List<PostMeta> createOrUpdateByPostId(Integer id, Set<PostMeta> postMetas);
|
||||
|
||||
List<PostMeta> listPostMetasBy(Integer id);
|
||||
|
||||
List<PostMeta> removeByPostId(Integer postId);
|
||||
|
||||
Map<Integer, List<PostMeta>> listPostMetaListMap(Set<Integer> postIds);
|
||||
|
||||
@NonNull
|
||||
PostMetaDTO convertTo(@NonNull PostMeta postMeta);
|
||||
|
||||
@NonNull
|
||||
List<PostMetaDTO> convertTo(@Nullable List<PostMeta> postMetaList);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import org.springframework.data.domain.Page;
|
|||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.entity.Post;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.params.PostQuery;
|
||||
import run.halo.app.model.vo.ArchiveMonthVO;
|
||||
|
@ -44,6 +45,19 @@ public interface PostService extends BasePostService<Post> {
|
|||
@NonNull
|
||||
Page<Post> pageBy(@NonNull String keyword, @NonNull Pageable pageable);
|
||||
|
||||
/**
|
||||
* Creates post by post param.
|
||||
*
|
||||
* @param post post must not be null
|
||||
* @param tagIds tag id set
|
||||
* @param categoryIds category id set
|
||||
* @param postMetas post metas
|
||||
* @param autoSave autoSave
|
||||
* @return post created
|
||||
*/
|
||||
@NonNull
|
||||
PostDetailVO createBy(@NonNull Post post, Set<Integer> tagIds, Set<Integer> categoryIds, Set<PostMeta> postMetas, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Creates post by post param.
|
||||
*
|
||||
|
@ -66,7 +80,7 @@ public interface PostService extends BasePostService<Post> {
|
|||
* @return updated post
|
||||
*/
|
||||
@NonNull
|
||||
PostDetailVO updateBy(@NonNull Post postToUpdate, Set<Integer> tagIds, Set<Integer> categoryIds, boolean autoSave);
|
||||
PostDetailVO updateBy(@NonNull Post postToUpdate, Set<Integer> tagIds, Set<Integer> categoryIds, Set<PostMeta> postMetas, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Gets post by post status and url.
|
||||
|
|
|
@ -212,7 +212,7 @@ public class PostCategoryServiceImpl extends AbstractCrudService<PostCategory, I
|
|||
|
||||
@Override
|
||||
public List<PostCategory> removeByPostId(Integer postId) {
|
||||
Assert.notNull(postId, "PoremoveByIdst id must not be null");
|
||||
Assert.notNull(postId, "Post id must not be null");
|
||||
|
||||
return postCategoryRepository.deleteByPostId(postId);
|
||||
}
|
||||
|
|
|
@ -2,11 +2,18 @@ package run.halo.app.service.impl;
|
|||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import run.halo.app.exception.NotFoundException;
|
||||
import run.halo.app.model.dto.PostMetaDTO;
|
||||
import run.halo.app.model.entity.PostMeta;
|
||||
import run.halo.app.repository.PostMetaRepository;
|
||||
import run.halo.app.repository.PostRepository;
|
||||
import run.halo.app.service.PostMetaService;
|
||||
import run.halo.app.utils.ServiceUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Post meta service implementation class.
|
||||
|
@ -35,4 +42,74 @@ public class PostMetaServiceImpl extends BaseMetaServiceImpl<PostMeta> implement
|
|||
postRepository.findById(postId)
|
||||
.orElseThrow(() -> new NotFoundException("查询不到该文章的信息").setErrorData(postId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PostMeta> createOrUpdateByPostId(Integer postId, Set<PostMeta> postMetas) {
|
||||
Assert.notNull(postId, "Post id must not be null");
|
||||
if (CollectionUtils.isEmpty(postMetas)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// firstly remove post metas by post id
|
||||
removeByPostId(postId);
|
||||
|
||||
// Save post metas
|
||||
postMetas.forEach(postMeta -> {
|
||||
postMeta.setPostId(postId);
|
||||
postMetaRepository.save(postMeta);
|
||||
});
|
||||
return new ArrayList<>(postMetas);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PostMeta> listPostMetasBy(Integer postId) {
|
||||
Assert.notNull(postId, "Post id must not be null");
|
||||
return postMetaRepository.findAllByPostId(postId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PostMeta> removeByPostId(Integer postId) {
|
||||
Assert.notNull(postId, "Post id must not be null of removeByPostId");
|
||||
return postMetaRepository.deleteByPostId(postId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, List<PostMeta>> listPostMetaListMap(Set<Integer> postIds) {
|
||||
if (CollectionUtils.isEmpty(postIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
// Find all post metas
|
||||
List<PostMeta> postMetas = postMetaRepository.findAllByPostIdIn(postIds);
|
||||
|
||||
// Convert to post meta map
|
||||
Map<Long, PostMeta> postMetaMap = ServiceUtils.convertToMap(postMetas, PostMeta::getId);
|
||||
|
||||
// Create category list map
|
||||
Map<Integer, List<PostMeta>> postMetaListMap = new HashMap<>();
|
||||
|
||||
// Foreach and collect
|
||||
postMetas.forEach(postMeta -> postMetaListMap.computeIfAbsent(postMeta.getPostId(), postId -> new LinkedList<>())
|
||||
.add(postMetaMap.get(postMeta.getId())));
|
||||
|
||||
return postMetaListMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PostMetaDTO convertTo(PostMeta postMeta) {
|
||||
Assert.notNull(postMeta, "Category must not be null");
|
||||
|
||||
return new PostMetaDTO().convertFrom(postMeta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PostMetaDTO> convertTo(List<PostMeta> postMetaList) {
|
||||
if (CollectionUtils.isEmpty(postMetaList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return postMetaList.stream()
|
||||
.map(this::convertTo)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.springframework.util.Assert;
|
|||
import run.halo.app.event.logger.LogEvent;
|
||||
import run.halo.app.event.post.PostVisitEvent;
|
||||
import run.halo.app.model.dto.CategoryDTO;
|
||||
import run.halo.app.model.dto.PostMetaDTO;
|
||||
import run.halo.app.model.dto.TagDTO;
|
||||
import run.halo.app.model.entity.*;
|
||||
import run.halo.app.model.enums.LogType;
|
||||
|
@ -67,6 +68,8 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
private final ApplicationEventPublisher eventPublisher;
|
||||
|
||||
private final PostMetaService postMetaService;
|
||||
|
||||
public PostServiceImpl(PostRepository postRepository,
|
||||
TagService tagService,
|
||||
CategoryService categoryService,
|
||||
|
@ -74,7 +77,8 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
PostCategoryService postCategoryService,
|
||||
PostCommentService postCommentService,
|
||||
ApplicationEventPublisher eventPublisher,
|
||||
OptionService optionService) {
|
||||
OptionService optionService,
|
||||
PostMetaService postMetaService) {
|
||||
super(postRepository, optionService);
|
||||
this.postRepository = postRepository;
|
||||
this.tagService = tagService;
|
||||
|
@ -83,6 +87,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
this.postCategoryService = postCategoryService;
|
||||
this.postCommentService = postCommentService;
|
||||
this.eventPublisher = eventPublisher;
|
||||
this.postMetaService = postMetaService;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -109,8 +114,19 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
@Override
|
||||
@Transactional
|
||||
public PostDetailVO createBy(Post postToCreate, Set<Integer> tagIds, Set<Integer> categoryIds, Set<PostMeta> postMetas, boolean autoSave) {
|
||||
PostDetailVO createdPost = createOrUpdate(postToCreate, tagIds, categoryIds, postMetas);
|
||||
if (!autoSave) {
|
||||
// Log the creation
|
||||
LogEvent logEvent = new LogEvent(this, createdPost.getId().toString(), LogType.POST_PUBLISHED, createdPost.getTitle());
|
||||
eventPublisher.publishEvent(logEvent);
|
||||
}
|
||||
return createdPost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PostDetailVO createBy(Post postToCreate, Set<Integer> tagIds, Set<Integer> categoryIds, boolean autoSave) {
|
||||
PostDetailVO createdPost = createOrUpdate(postToCreate, tagIds, categoryIds);
|
||||
PostDetailVO createdPost = createOrUpdate(postToCreate, tagIds, categoryIds, null);
|
||||
if (!autoSave) {
|
||||
// Log the creation
|
||||
LogEvent logEvent = new LogEvent(this, createdPost.getId().toString(), LogType.POST_PUBLISHED, createdPost.getTitle());
|
||||
|
@ -121,10 +137,10 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
@Override
|
||||
@Transactional
|
||||
public PostDetailVO updateBy(Post postToUpdate, Set<Integer> tagIds, Set<Integer> categoryIds, boolean autoSave) {
|
||||
public PostDetailVO updateBy(Post postToUpdate, Set<Integer> tagIds, Set<Integer> categoryIds, Set<PostMeta> postMetas, boolean autoSave) {
|
||||
// Set edit time
|
||||
postToUpdate.setEditTime(DateUtils.now());
|
||||
PostDetailVO updatedPost = createOrUpdate(postToUpdate, tagIds, categoryIds);
|
||||
PostDetailVO updatedPost = createOrUpdate(postToUpdate, tagIds, categoryIds, postMetas);
|
||||
if (!autoSave) {
|
||||
// Log the creation
|
||||
LogEvent logEvent = new LogEvent(this, updatedPost.getId().toString(), LogType.POST_EDITED, updatedPost.getTitle());
|
||||
|
@ -227,6 +243,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
Set<Integer> tagIds = new HashSet<>();
|
||||
|
||||
Set<Integer> categoryIds = new HashSet<>();
|
||||
|
||||
if (frontMatter.size() > 0) {
|
||||
for (String key : frontMatter.keySet()) {
|
||||
elementValue = frontMatter.get(key);
|
||||
|
@ -309,6 +326,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
public String exportMarkdown(Post post) {
|
||||
Assert.notNull(post, "Post must not be null");
|
||||
|
||||
|
||||
StrBuilder content = new StrBuilder("---\n");
|
||||
|
||||
content.append("type: ").append("post").append("\n");
|
||||
|
@ -338,6 +356,15 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
}
|
||||
}
|
||||
|
||||
List<PostMeta> postMetas = postMetaService.listPostMetasBy(post.getId());
|
||||
|
||||
if (postMetas.size() > 0) {
|
||||
content.append("postMetas:").append("\n");
|
||||
for (PostMeta postMeta : postMetas) {
|
||||
content.append(" - ").append(postMeta.getKey()).append(" : ").append(postMeta.getValue()).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
content.append("---\n\n");
|
||||
content.append(post.getOriginalContent());
|
||||
return content.toString();
|
||||
|
@ -349,9 +376,10 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
List<Tag> tags = postTagService.listTagsBy(post.getId());
|
||||
// List categories
|
||||
List<Category> categories = postCategoryService.listCategoriesBy(post.getId());
|
||||
|
||||
// List postMetas
|
||||
List<PostMeta> postMetas = postMetaService.listPostMetasBy(post.getId());
|
||||
// Convert to detail vo
|
||||
return convertTo(post, tags, categories);
|
||||
return convertTo(post, tags, categories, postMetas);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -370,6 +398,9 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
log.debug("Removed post categories: [{}]", postCategories);
|
||||
|
||||
List<PostMeta> postMetas = postMetaService.removeByPostId(postId);
|
||||
log.debug("Removed post metas: [{}]", postMetas);
|
||||
|
||||
Post deletedPost = super.removeById(postId);
|
||||
|
||||
// Log it
|
||||
|
@ -395,6 +426,9 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
// Get comment count
|
||||
Map<Integer, Long> commentCountMap = postCommentService.countByPostIds(postIds);
|
||||
|
||||
// Get post meta list map
|
||||
Map<Integer, List<PostMeta>> postMetaListMap = postMetaService.listPostMetaListMap(postIds);
|
||||
|
||||
return postPage.map(post -> {
|
||||
PostListVO postListVO = new PostListVO().convertFrom(post);
|
||||
|
||||
|
@ -420,6 +454,14 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
.map(category -> (CategoryDTO) new CategoryDTO().convertFrom(category))
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
// Set post metas
|
||||
postListVO.setPostMetas(Optional.ofNullable(postMetaListMap.get(post.getId()))
|
||||
.orElseGet(LinkedList::new)
|
||||
.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(postMeta -> (PostMetaDTO) new PostMetaDTO().convertFrom(postMeta))
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
// Set comment count
|
||||
postListVO.setCommentCount(commentCountMap.getOrDefault(post.getId(), 0L));
|
||||
|
||||
|
@ -433,10 +475,11 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
* @param post post must not be null
|
||||
* @param tags tags
|
||||
* @param categories categories
|
||||
* @param postMetaList postMetas
|
||||
* @return post detail vo
|
||||
*/
|
||||
@NonNull
|
||||
private PostDetailVO convertTo(@NonNull Post post, @Nullable List<Tag> tags, @Nullable List<Category> categories) {
|
||||
private PostDetailVO convertTo(@NonNull Post post, @Nullable List<Tag> tags, @Nullable List<Category> categories, List<PostMeta> postMetaList) {
|
||||
Assert.notNull(post, "Post must not be null");
|
||||
|
||||
// Convert to base detail vo
|
||||
|
@ -445,6 +488,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
// Extract ids
|
||||
Set<Integer> tagIds = ServiceUtils.fetchProperty(tags, Tag::getId);
|
||||
Set<Integer> categoryIds = ServiceUtils.fetchProperty(categories, Category::getId);
|
||||
Set<Long> postMetaIds = ServiceUtils.fetchProperty(postMetaList, PostMeta::getId);
|
||||
|
||||
// Get post tag ids
|
||||
postDetailVO.setTagIds(tagIds);
|
||||
|
@ -454,6 +498,9 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
postDetailVO.setCategoryIds(categoryIds);
|
||||
postDetailVO.setCategories(categoryService.convertTo(categories));
|
||||
|
||||
// Get post meta ids
|
||||
postDetailVO.setPostMetaIds(postMetaIds);
|
||||
postDetailVO.setPostMetas(postMetaService.convertTo(postMetaList));
|
||||
return postDetailVO;
|
||||
}
|
||||
|
||||
|
@ -499,7 +546,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
};
|
||||
}
|
||||
|
||||
private PostDetailVO createOrUpdate(@NonNull Post post, Set<Integer> tagIds, Set<Integer> categoryIds) {
|
||||
private PostDetailVO createOrUpdate(@NonNull Post post, Set<Integer> tagIds, Set<Integer> categoryIds, Set<PostMeta> postMetas) {
|
||||
Assert.notNull(post, "Post param must not be null");
|
||||
|
||||
// Create or update post
|
||||
|
@ -525,7 +572,11 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
log.debug("Created post categories: [{}]", postCategories);
|
||||
|
||||
// Create post meta data
|
||||
List<PostMeta> postMetaList = postMetaService.createOrUpdateByPostId(post.getId(), postMetas);
|
||||
log.debug("Created post postMetas: [{}]", postMetaList);
|
||||
|
||||
// Convert to post detail vo
|
||||
return convertTo(post, tags, categories);
|
||||
return convertTo(post, tags, categories, postMetaList);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,3 +56,4 @@ logging:
|
|||
|
||||
halo:
|
||||
download-timeout: 5m
|
||||
doc-disabled: false
|
Loading…
Reference in New Issue