mirror of https://github.com/halo-dev/halo
feat: support sheet meta.
parent
267e184af1
commit
bc411484d6
|
@ -3,11 +3,8 @@ package run.halo.app.controller.admin.api;
|
|||
import cn.hutool.core.util.IdUtil;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.web.PageableDefault;
|
||||
import org.springframework.data.web.SortDefault;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import run.halo.app.cache.StringCacheStore;
|
||||
import run.halo.app.model.dto.post.BasePostMinimalDTO;
|
||||
|
|
|
@ -8,10 +8,10 @@ import org.springframework.data.web.PageableDefault;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
import run.halo.app.cache.StringCacheStore;
|
||||
import run.halo.app.model.dto.InternalSheetDTO;
|
||||
import run.halo.app.model.dto.post.BasePostDetailDTO;
|
||||
import run.halo.app.model.entity.Sheet;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.params.SheetParam;
|
||||
import run.halo.app.model.vo.SheetDetailVO;
|
||||
import run.halo.app.model.vo.SheetListVO;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.SheetService;
|
||||
|
@ -49,9 +49,9 @@ public class SheetController {
|
|||
|
||||
@GetMapping("{sheetId:\\d+}")
|
||||
@ApiOperation("Gets a sheet")
|
||||
public BasePostDetailDTO getBy(@PathVariable("sheetId") Integer sheetId) {
|
||||
public SheetDetailVO getBy(@PathVariable("sheetId") Integer sheetId) {
|
||||
Sheet sheet = sheetService.getById(sheetId);
|
||||
return sheetService.convertToDetail(sheet);
|
||||
return sheetService.convertToDetailVo(sheet);
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
|
@ -69,15 +69,15 @@ public class SheetController {
|
|||
|
||||
@PostMapping
|
||||
@ApiOperation("Creates a sheet")
|
||||
public BasePostDetailDTO createBy(@RequestBody @Valid SheetParam sheetParam,
|
||||
@RequestParam(value = "autoSave", required = false, defaultValue = "false") Boolean autoSave) {
|
||||
Sheet sheet = sheetService.createBy(sheetParam.convertTo(), autoSave);
|
||||
return sheetService.convertToDetail(sheet);
|
||||
public SheetDetailVO createBy(@RequestBody @Valid SheetParam sheetParam,
|
||||
@RequestParam(value = "autoSave", required = false, defaultValue = "false") Boolean autoSave) {
|
||||
Sheet sheet = sheetService.createBy(sheetParam.convertTo(), sheetParam.getSheetMetas(), autoSave);
|
||||
return sheetService.convertToDetailVo(sheet);
|
||||
}
|
||||
|
||||
@PutMapping("{sheetId:\\d+}")
|
||||
@ApiOperation("Updates a sheet")
|
||||
public BasePostDetailDTO updateBy(
|
||||
public SheetDetailVO updateBy(
|
||||
@PathVariable("sheetId") Integer sheetId,
|
||||
@RequestBody @Valid SheetParam sheetParam,
|
||||
@RequestParam(value = "autoSave", required = false, defaultValue = "false") Boolean autoSave) {
|
||||
|
@ -85,9 +85,9 @@ public class SheetController {
|
|||
|
||||
sheetParam.update(sheetToUpdate);
|
||||
|
||||
Sheet sheet = sheetService.updateBy(sheetToUpdate, autoSave);
|
||||
Sheet sheet = sheetService.updateBy(sheetToUpdate, sheetParam.getSheetMetas(), autoSave);
|
||||
|
||||
return sheetService.convertToDetail(sheet);
|
||||
return sheetService.convertToDetailVo(sheet);
|
||||
}
|
||||
|
||||
@PutMapping("{sheetId:\\d+}/{status}")
|
||||
|
@ -105,9 +105,9 @@ public class SheetController {
|
|||
|
||||
@DeleteMapping("{sheetId:\\d+}")
|
||||
@ApiOperation("Deletes a sheet")
|
||||
public BasePostDetailDTO deleteBy(@PathVariable("sheetId") Integer sheetId) {
|
||||
public SheetDetailVO deleteBy(@PathVariable("sheetId") Integer sheetId) {
|
||||
Sheet sheet = sheetService.removeById(sheetId);
|
||||
return sheetService.convertToDetail(sheet);
|
||||
return sheetService.convertToDetailVo(sheet);
|
||||
}
|
||||
|
||||
@GetMapping("preview/{sheetId:\\d+}")
|
||||
|
|
|
@ -162,7 +162,7 @@ public class ContentArchiveController {
|
|||
|
||||
List<Category> categories = postCategoryService.listCategoriesBy(post.getId());
|
||||
List<Tag> tags = postTagService.listTagsBy(post.getId());
|
||||
List<PostMeta> metas = postMetaService.listPostMetasBy(post.getId());
|
||||
List<PostMeta> metas = postMetaService.listBy(post.getId());
|
||||
|
||||
Page<BaseCommentVO> comments = postCommentService.pageVosBy(post.getId(), PageRequest.of(cp, optionService.getCommentPageSize(), sort));
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ import run.halo.app.utils.FilenameUtils;
|
|||
import run.halo.app.utils.ImageUtils;
|
||||
import run.halo.app.utils.JsonUtils;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
|
|
@ -89,9 +89,9 @@ public class UpOssFileHandler implements FileHandler {
|
|||
BufferedImage image = ImageUtils.getImageFromFile(file.getInputStream(), extension);
|
||||
uploadResult.setWidth(image.getWidth());
|
||||
uploadResult.setHeight(image.getHeight());
|
||||
if(ImageUtils.EXTENSION_ICO.equals(extension)){
|
||||
if (ImageUtils.EXTENSION_ICO.equals(extension)) {
|
||||
uploadResult.setThumbPath(filePath);
|
||||
}else {
|
||||
} else {
|
||||
uploadResult.setThumbPath(StringUtils.isBlank(thumbnailStyleRule) ? filePath : filePath + thumbnailStyleRule);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,20 +4,20 @@ 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 run.halo.app.model.entity.BaseMeta;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Post meta output dto.
|
||||
* Base meta Dto.
|
||||
*
|
||||
* @author guqing
|
||||
* @date 2019-11-30
|
||||
* @author ryanwang
|
||||
* @date 2019-12-10
|
||||
*/
|
||||
@Data
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
public class PostMetaDTO implements OutputConverter<PostMetaDTO, PostMeta> {
|
||||
public class BaseMetaDTO implements OutputConverter<BaseMetaDTO, BaseMeta> {
|
||||
private Long id;
|
||||
|
||||
private Integer postId;
|
|
@ -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.Sheet;
|
||||
import run.halo.app.model.entity.SheetMeta;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.utils.SlugUtils;
|
||||
|
||||
|
@ -11,6 +13,8 @@ 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;
|
||||
|
||||
/**
|
||||
* Sheet param.
|
||||
|
@ -48,6 +52,8 @@ public class SheetParam implements InputConverter<Sheet> {
|
|||
@Min(value = 0, message = "Post top priority must not be less than {value}")
|
||||
private Integer topPriority = 0;
|
||||
|
||||
private Set<SheetMetaParam> sheetMetas;
|
||||
|
||||
@Override
|
||||
public Sheet convertTo() {
|
||||
url = StringUtils.isBlank(url) ? SlugUtils.slug(title) : SlugUtils.slug(url);
|
||||
|
@ -69,4 +75,17 @@ public class SheetParam implements InputConverter<Sheet> {
|
|||
|
||||
InputConverter.super.update(sheet);
|
||||
}
|
||||
|
||||
public Set<SheetMeta> getSheetMetas() {
|
||||
Set<SheetMeta> sheetMetasSet = new HashSet<>();
|
||||
if (CollectionUtils.isEmpty(sheetMetas)) {
|
||||
return sheetMetasSet;
|
||||
}
|
||||
|
||||
for (SheetMetaParam sheetMetaParam : sheetMetas) {
|
||||
SheetMeta sheetMeta = sheetMetaParam.convertTo();
|
||||
sheetMetasSet.add(sheetMeta);
|
||||
}
|
||||
return sheetMetasSet;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ package run.halo.app.model.vo;
|
|||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import run.halo.app.model.dto.BaseMetaDTO;
|
||||
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;
|
||||
|
||||
|
@ -33,6 +33,6 @@ public class PostDetailVO extends BasePostDetailDTO {
|
|||
|
||||
private Set<Long> postMetaIds;
|
||||
|
||||
private List<PostMetaDTO> postMetas;
|
||||
private List<BaseMetaDTO> postMetas;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ package run.halo.app.model.vo;
|
|||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import run.halo.app.model.dto.BaseMetaDTO;
|
||||
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;
|
||||
|
||||
|
@ -26,5 +26,5 @@ public class PostListVO extends BasePostSimpleDTO {
|
|||
|
||||
private List<CategoryDTO> categories;
|
||||
|
||||
private List<PostMetaDTO> postMetas;
|
||||
private List<BaseMetaDTO> postMetas;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package run.halo.app.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import run.halo.app.model.dto.BaseMetaDTO;
|
||||
import run.halo.app.model.dto.post.BasePostDetailDTO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Sheet detail VO.
|
||||
*
|
||||
* @author ryanwang
|
||||
* @date 2019-12-10
|
||||
*/
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SheetDetailVO extends BasePostDetailDTO {
|
||||
|
||||
private Set<Long> sheetMetaIds;
|
||||
|
||||
private List<BaseMetaDTO> sheetMetas;
|
||||
}
|
|
@ -1,12 +1,8 @@
|
|||
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.
|
||||
*
|
||||
|
@ -17,20 +13,4 @@ import java.util.Set;
|
|||
*/
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.springframework.lang.NonNull;
|
|||
import run.halo.app.model.entity.BaseMeta;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Base meta repository.
|
||||
|
@ -25,4 +26,22 @@ public interface BaseMetaRepository<META extends BaseMeta> extends BaseRepositor
|
|||
*/
|
||||
@NonNull
|
||||
List<META> findAllByPostId(@NonNull Integer postId);
|
||||
|
||||
/**
|
||||
* Deletes post metas by post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @return a list of post meta deleted
|
||||
*/
|
||||
@NonNull
|
||||
List<META> 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<META> findAllByPostIdIn(@NonNull Set<Integer> postIds);
|
||||
}
|
||||
|
|
|
@ -1,14 +1,8 @@
|
|||
package run.halo.app.service;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
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.
|
||||
*
|
||||
|
@ -18,55 +12,4 @@ import java.util.Set;
|
|||
* @date 2019-08-04
|
||||
*/
|
||||
public interface PostMetaService extends BaseMetaService<PostMeta> {
|
||||
|
||||
/**
|
||||
* Creates by post metas and post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @param postMetas post metas must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
List<PostMeta> createOrUpdateByPostId(@NonNull Integer postId, Set<PostMeta> postMetas);
|
||||
|
||||
/**
|
||||
* Lists post metas by post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
List<PostMeta> listPostMetasBy(@NonNull Integer postId);
|
||||
|
||||
/**
|
||||
* Remove post metas by post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
List<PostMeta> removeByPostId(@NonNull Integer postId);
|
||||
|
||||
/**
|
||||
* Lists post metas as map.
|
||||
*
|
||||
* @param postIds post ids must not be null
|
||||
* @return a map of post meta
|
||||
*/
|
||||
Map<Integer, List<PostMeta>> listPostMetaAsMap(@NonNull Set<Integer> postIds);
|
||||
|
||||
/**
|
||||
* Convert PostMeta to PostMetaDTO.
|
||||
*
|
||||
* @param postMeta post meta must not be null
|
||||
* @return post meta vo
|
||||
*/
|
||||
@NonNull
|
||||
PostMetaDTO convertTo(@NonNull PostMeta postMeta);
|
||||
|
||||
/**
|
||||
* Convert list of PostMeta to list of PostMetaDTO.
|
||||
*
|
||||
* @param postMetaList post meta list must not be null
|
||||
* @return a list of post meta dto
|
||||
*/
|
||||
@NonNull
|
||||
List<PostMetaDTO> convertTo(@NonNull List<PostMeta> postMetaList);
|
||||
}
|
||||
|
|
|
@ -4,11 +4,14 @@ import org.springframework.data.domain.Page;
|
|||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.dto.InternalSheetDTO;
|
||||
import run.halo.app.model.entity.Sheet;
|
||||
import run.halo.app.model.entity.SheetMeta;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.vo.SheetDetailVO;
|
||||
import run.halo.app.model.vo.SheetListVO;
|
||||
import run.halo.app.service.base.BasePostService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Sheet service interface.
|
||||
|
@ -29,6 +32,16 @@ public interface SheetService extends BasePostService<Sheet> {
|
|||
@NonNull
|
||||
Sheet createBy(@NonNull Sheet sheet, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Creates a sheet.
|
||||
*
|
||||
* @param sheet sheet must not be null
|
||||
* @param sheetMetas sheet metas
|
||||
* @param autoSave autoSave
|
||||
* @return created sheet
|
||||
*/
|
||||
Sheet createBy(@NonNull Sheet sheet, Set<SheetMeta> sheetMetas, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Updates a sheet.
|
||||
*
|
||||
|
@ -39,6 +52,16 @@ public interface SheetService extends BasePostService<Sheet> {
|
|||
@NonNull
|
||||
Sheet updateBy(@NonNull Sheet sheet, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Updates a sheet.
|
||||
*
|
||||
* @param sheet sheet must not be null
|
||||
* @param sheetMetas sheet metas
|
||||
* @param autoSave autoSave
|
||||
* @return updated sheet
|
||||
*/
|
||||
Sheet updateBy(@NonNull Sheet sheet, Set<SheetMeta> sheetMetas, boolean autoSave);
|
||||
|
||||
/**
|
||||
* Gets by url
|
||||
*
|
||||
|
@ -92,4 +115,13 @@ public interface SheetService extends BasePostService<Sheet> {
|
|||
*/
|
||||
@NonNull
|
||||
Page<SheetListVO> convertToListVo(@NonNull Page<Sheet> sheetPage);
|
||||
|
||||
/**
|
||||
* Converts to detail vo.
|
||||
*
|
||||
* @param sheet sheet must not be null
|
||||
* @return sheet detail vo
|
||||
*/
|
||||
@NonNull
|
||||
SheetDetailVO convertToDetailVo(@NonNull Sheet sheet);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package run.halo.app.service.base;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.dto.BaseMetaDTO;
|
||||
import run.halo.app.model.entity.BaseMeta;
|
||||
import run.halo.app.model.params.BaseMetaParam;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Base meta service interface.
|
||||
|
@ -16,6 +18,31 @@ import java.util.Map;
|
|||
*/
|
||||
public interface BaseMetaService<META extends BaseMeta> extends CrudService<META, Long> {
|
||||
|
||||
/**
|
||||
* Creates by post metas and post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @param postMetas post metas must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
List<META> createOrUpdateByPostId(@NonNull Integer postId, Set<META> postMetas);
|
||||
|
||||
/**
|
||||
* Remove post metas by post id.
|
||||
*
|
||||
* @param postId post id must not be null
|
||||
* @return a list of post meta
|
||||
*/
|
||||
List<META> removeByPostId(@NonNull Integer postId);
|
||||
|
||||
/**
|
||||
* Lists post metas as map.
|
||||
*
|
||||
* @param postIds post ids must not be null
|
||||
* @return a map of post meta
|
||||
*/
|
||||
Map<Integer, List<META>> listPostMetaAsMap(@NonNull Set<Integer> postIds);
|
||||
|
||||
/**
|
||||
* Lists metas by post id.
|
||||
*
|
||||
|
@ -25,7 +52,6 @@ public interface BaseMetaService<META extends BaseMeta> extends CrudService<META
|
|||
@NonNull
|
||||
List<META> listBy(@NonNull Integer postId);
|
||||
|
||||
|
||||
/**
|
||||
* Creates a meta by meta.
|
||||
*
|
||||
|
@ -59,4 +85,22 @@ public interface BaseMetaService<META extends BaseMeta> extends CrudService<META
|
|||
* @return a map of metas
|
||||
*/
|
||||
Map<String, Object> convertToMap(List<META> metas);
|
||||
|
||||
/**
|
||||
* Convert PostMeta to PostMetaDTO.
|
||||
*
|
||||
* @param postMeta post meta must not be null
|
||||
* @return post meta vo
|
||||
*/
|
||||
@NonNull
|
||||
BaseMetaDTO convertTo(@NonNull META postMeta);
|
||||
|
||||
/**
|
||||
* Convert list of PostMeta to list of PostMetaDTO.
|
||||
*
|
||||
* @param postMetaList post meta list must not be null
|
||||
* @return a list of post meta dto
|
||||
*/
|
||||
@NonNull
|
||||
List<BaseMetaDTO> convertTo(@NonNull List<META> postMetaList);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package run.halo.app.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import run.halo.app.model.dto.BaseMetaDTO;
|
||||
import run.halo.app.model.entity.BaseMeta;
|
||||
import run.halo.app.model.params.BaseMetaParam;
|
||||
import run.halo.app.repository.base.BaseMetaRepository;
|
||||
|
@ -10,10 +13,8 @@ import run.halo.app.service.base.AbstractCrudService;
|
|||
import run.halo.app.service.base.BaseMetaService;
|
||||
import run.halo.app.utils.ServiceUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Base meta service implementation.
|
||||
|
@ -33,6 +34,57 @@ public abstract class BaseMetaServiceImpl<META extends BaseMeta> extends Abstrac
|
|||
this.baseMetaRepository = baseMetaRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public List<META> createOrUpdateByPostId(Integer postId, Set<META> postMetas) {
|
||||
Assert.notNull(postId, "Post id must not be null");
|
||||
|
||||
// firstly remove post metas by post id
|
||||
removeByPostId(postId);
|
||||
|
||||
if (CollectionUtils.isEmpty(postMetas)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// Save post metas
|
||||
postMetas.forEach(postMeta -> {
|
||||
if (StringUtils.isNotEmpty(postMeta.getValue()) && StringUtils.isNotEmpty(postMeta.getKey())) {
|
||||
postMeta.setPostId(postId);
|
||||
baseMetaRepository.save(postMeta);
|
||||
}
|
||||
});
|
||||
return new ArrayList<>(postMetas);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<META> removeByPostId(Integer postId) {
|
||||
Assert.notNull(postId, "Post id must not be null of removeByPostId");
|
||||
return baseMetaRepository.deleteByPostId(postId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, List<META>> listPostMetaAsMap(Set<Integer> postIds) {
|
||||
Assert.notNull(postIds, "Post ids must not be null");
|
||||
if (CollectionUtils.isEmpty(postIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
// Find all post metas
|
||||
List<META> postMetas = baseMetaRepository.findAllByPostIdIn(postIds);
|
||||
|
||||
// Convert to post meta map
|
||||
Map<Long, META> postMetaMap = ServiceUtils.convertToMap(postMetas, META::getId);
|
||||
|
||||
// Create category list map
|
||||
Map<Integer, List<META>> 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 List<META> listBy(Integer postId) {
|
||||
Assert.notNull(postId, "Post id must not be null");
|
||||
|
@ -69,4 +121,23 @@ public abstract class BaseMetaServiceImpl<META extends BaseMeta> extends Abstrac
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BaseMetaDTO convertTo(META postMeta) {
|
||||
Assert.notNull(postMeta, "Category must not be null");
|
||||
|
||||
return new BaseMetaDTO().convertFrom(postMeta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BaseMetaDTO> convertTo(List<META> postMetaList) {
|
||||
if (CollectionUtils.isEmpty(postMetaList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return postMetaList.stream()
|
||||
.map(this::convertTo)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -342,7 +342,7 @@ public abstract class BasePostServiceImpl<POST extends BasePost> extends Abstrac
|
|||
* @param post post must not be null
|
||||
*/
|
||||
protected void urlMustNotExist(@NonNull POST post) {
|
||||
Assert.notNull(post, "Sheet must not be null");
|
||||
Assert.notNull(post, "Post must not be null");
|
||||
|
||||
// Get url count
|
||||
boolean exist;
|
||||
|
|
|
@ -1,20 +1,12 @@
|
|||
package run.halo.app.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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.repository.base.BaseMetaRepository;
|
||||
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.
|
||||
|
@ -28,14 +20,10 @@ import java.util.stream.Collectors;
|
|||
@Service
|
||||
public class PostMetaServiceImpl extends BaseMetaServiceImpl<PostMeta> implements PostMetaService {
|
||||
|
||||
private final PostMetaRepository postMetaRepository;
|
||||
|
||||
private final PostRepository postRepository;
|
||||
|
||||
public PostMetaServiceImpl(PostMetaRepository postMetaRepository,
|
||||
PostRepository postRepository) {
|
||||
super(postMetaRepository);
|
||||
this.postMetaRepository = postMetaRepository;
|
||||
public PostMetaServiceImpl(BaseMetaRepository<PostMeta> baseMetaRepository, PostRepository postRepository) {
|
||||
super(baseMetaRepository);
|
||||
this.postRepository = postRepository;
|
||||
}
|
||||
|
||||
|
@ -44,77 +32,4 @@ 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 -> {
|
||||
if (StringUtils.isNotEmpty(postMeta.getValue()) && StringUtils.isNotEmpty(postMeta.getKey())) {
|
||||
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>> listPostMetaAsMap(Set<Integer> postIds) {
|
||||
Assert.notNull(postIds, "Post ids must not be null");
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
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.BaseMetaDTO;
|
||||
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;
|
||||
|
@ -357,7 +357,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
}
|
||||
}
|
||||
|
||||
List<PostMeta> postMetas = postMetaService.listPostMetasBy(post.getId());
|
||||
List<PostMeta> postMetas = postMetaService.listBy(post.getId());
|
||||
|
||||
if (postMetas.size() > 0) {
|
||||
content.append("postMetas:").append("\n");
|
||||
|
@ -378,7 +378,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
// List categories
|
||||
List<Category> categories = postCategoryService.listCategoriesBy(post.getId());
|
||||
// List postMetas
|
||||
List<PostMeta> postMetas = postMetaService.listPostMetasBy(post.getId());
|
||||
List<PostMeta> postMetas = postMetaService.listBy(post.getId());
|
||||
// Convert to detail vo
|
||||
return convertTo(post, tags, categories, postMetas);
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
.orElseGet(LinkedList::new)
|
||||
.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(postMeta -> (PostMetaDTO) new PostMetaDTO().convertFrom(postMeta))
|
||||
.map(postMeta -> (BaseMetaDTO) new BaseMetaDTO().convertFrom(postMeta))
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
// Set comment count
|
||||
|
@ -557,8 +557,6 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
|
||||
postCategoryService.removeByPostId(post.getId());
|
||||
|
||||
postMetaService.removeByPostId(post.getId());
|
||||
|
||||
// List all tags
|
||||
List<Tag> tags = tagService.listAllByIds(tagIds);
|
||||
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
package run.halo.app.service.impl;
|
||||
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
import run.halo.app.event.logger.LogEvent;
|
||||
import run.halo.app.event.post.SheetVisitEvent;
|
||||
import run.halo.app.exception.AlreadyExistsException;
|
||||
import run.halo.app.exception.NotFoundException;
|
||||
import run.halo.app.model.dto.InternalSheetDTO;
|
||||
import run.halo.app.model.entity.Sheet;
|
||||
import run.halo.app.model.entity.SheetMeta;
|
||||
import run.halo.app.model.enums.LogType;
|
||||
import run.halo.app.model.enums.PostStatus;
|
||||
import run.halo.app.model.vo.SheetDetailVO;
|
||||
import run.halo.app.model.vo.SheetListVO;
|
||||
import run.halo.app.repository.SheetRepository;
|
||||
import run.halo.app.service.OptionService;
|
||||
import run.halo.app.service.SheetCommentService;
|
||||
import run.halo.app.service.SheetService;
|
||||
import run.halo.app.service.ThemeService;
|
||||
import run.halo.app.service.*;
|
||||
import run.halo.app.utils.MarkdownUtils;
|
||||
import run.halo.app.utils.ServiceUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Sheet service implementation.
|
||||
|
@ -33,6 +33,7 @@ import java.util.Set;
|
|||
* @author ryanwang
|
||||
* @date 2019-04-24
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements SheetService {
|
||||
|
||||
|
@ -42,17 +43,21 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
|||
|
||||
private final SheetCommentService sheetCommentService;
|
||||
|
||||
private final SheetMetaService sheetMetaService;
|
||||
|
||||
private final ThemeService themeService;
|
||||
|
||||
public SheetServiceImpl(SheetRepository sheetRepository,
|
||||
ApplicationEventPublisher eventPublisher,
|
||||
SheetCommentService sheetCommentService,
|
||||
OptionService optionService,
|
||||
SheetMetaService sheetMetaService,
|
||||
ThemeService themeService) {
|
||||
super(sheetRepository, optionService);
|
||||
this.sheetRepository = sheetRepository;
|
||||
this.eventPublisher = eventPublisher;
|
||||
this.sheetCommentService = sheetCommentService;
|
||||
this.sheetMetaService = sheetMetaService;
|
||||
this.themeService = themeService;
|
||||
}
|
||||
|
||||
|
@ -67,6 +72,22 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
|||
return createdSheet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheet createBy(Sheet sheet, Set<SheetMeta> sheetMetas, boolean autoSave) {
|
||||
Sheet createdSheet = createOrUpdateBy(sheet);
|
||||
|
||||
// Create sheet meta data
|
||||
List<SheetMeta> sheetMetaList = sheetMetaService.createOrUpdateByPostId(sheet.getId(), sheetMetas);
|
||||
log.debug("Created sheet metas: [{}]", sheetMetaList);
|
||||
|
||||
if (!autoSave) {
|
||||
// Log the creation
|
||||
LogEvent logEvent = new LogEvent(this, createdSheet.getId().toString(), LogType.SHEET_PUBLISHED, createdSheet.getTitle());
|
||||
eventPublisher.publishEvent(logEvent);
|
||||
}
|
||||
return createdSheet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheet updateBy(Sheet sheet, boolean autoSave) {
|
||||
Sheet updatedSheet = createOrUpdateBy(sheet);
|
||||
|
@ -78,6 +99,23 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
|||
return updatedSheet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheet updateBy(Sheet sheet, Set<SheetMeta> sheetMetas, boolean autoSave) {
|
||||
|
||||
Sheet updatedSheet = createOrUpdateBy(sheet);
|
||||
|
||||
// Create sheet meta data
|
||||
List<SheetMeta> sheetMetaList = sheetMetaService.createOrUpdateByPostId(updatedSheet.getId(), sheetMetas);
|
||||
log.debug("Created sheet metas: [{}]", sheetMetaList);
|
||||
|
||||
if (!autoSave) {
|
||||
// Log the creation
|
||||
LogEvent logEvent = new LogEvent(this, updatedSheet.getId().toString(), LogType.SHEET_EDITED, updatedSheet.getTitle());
|
||||
eventPublisher.publishEvent(logEvent);
|
||||
}
|
||||
return updatedSheet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Sheet> pageBy(Pageable pageable) {
|
||||
Assert.notNull(pageable, "Page info must not be null");
|
||||
|
@ -85,9 +123,21 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
|||
return listAll(pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheet getByUrl(String url) {
|
||||
Assert.hasText(url, "Url must not be blank");
|
||||
|
||||
return sheetRepository.getByUrl(url).orElseThrow(() -> new NotFoundException("查询不到该页面的信息").setErrorData(url));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheet getBy(PostStatus status, String url) {
|
||||
Sheet sheet = super.getBy(status, url);
|
||||
Assert.notNull(status, "Post status must not be null");
|
||||
Assert.hasText(url, "Post url must not be blank");
|
||||
|
||||
Optional<Sheet> postOptional = sheetRepository.getByUrlAndStatus(url, status);
|
||||
|
||||
Sheet sheet = postOptional.orElseThrow(() -> new NotFoundException("查询不到该页面的信息").setErrorData(url));
|
||||
|
||||
if (PostStatus.PUBLISHED.equals(status)) {
|
||||
// Log it
|
||||
|
@ -199,4 +249,46 @@ public class SheetServiceImpl extends BasePostServiceImpl<Sheet> implements Shee
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public SheetDetailVO convertToDetailVo(Sheet sheet) {
|
||||
// List sheetMetas
|
||||
List<SheetMeta> sheetMetas = sheetMetaService.listBy(sheet.getId());
|
||||
// Convert to detail vo
|
||||
return convertTo(sheet, sheetMetas);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private SheetDetailVO convertTo(@NonNull Sheet sheet, List<SheetMeta> sheetMetas) {
|
||||
Assert.notNull(sheet, "Sheet must not be null");
|
||||
|
||||
// Convert to base detail vo
|
||||
SheetDetailVO sheetDetailVO = new SheetDetailVO().convertFrom(sheet);
|
||||
|
||||
Set<Long> sheetMetaIds = ServiceUtils.fetchProperty(sheetMetas, SheetMeta::getId);
|
||||
|
||||
// Get sheet meta ids
|
||||
sheetDetailVO.setSheetMetaIds(sheetMetaIds);
|
||||
sheetDetailVO.setSheetMetas(sheetMetaService.convertTo(sheetMetas));
|
||||
return sheetDetailVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void urlMustNotExist(Sheet sheet) {
|
||||
Assert.notNull(sheet, "Sheet must not be null");
|
||||
|
||||
// Get url count
|
||||
boolean exist;
|
||||
|
||||
if (ServiceUtils.isEmptyId(sheet.getId())) {
|
||||
// The sheet will be created
|
||||
exist = sheetRepository.existsByUrl(sheet.getUrl());
|
||||
} else {
|
||||
// The sheet will be updated
|
||||
exist = sheetRepository.existsByIdNotAndUrl(sheet.getId(), sheet.getUrl());
|
||||
}
|
||||
|
||||
if (exist) {
|
||||
throw new AlreadyExistsException("页面路径 " + sheet.getUrl() + " 已存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue