mirror of https://github.com/halo-dev/halo
Refactor journal entity, repository, service and controller
parent
f99efc891f
commit
5f6a8ba790
|
@ -4,11 +4,13 @@ import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import run.halo.app.model.dto.BaseCommentDTO;
|
import run.halo.app.model.dto.JournalDTO;
|
||||||
|
import run.halo.app.model.dto.JournalWithCmtCountDTO;
|
||||||
import run.halo.app.model.entity.Journal;
|
import run.halo.app.model.entity.Journal;
|
||||||
import run.halo.app.model.params.JournalParam;
|
import run.halo.app.model.params.JournalParam;
|
||||||
import run.halo.app.service.JournalService;
|
import run.halo.app.service.JournalService;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,21 +31,21 @@ public class JournalController {
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@ApiOperation("Gets latest journals")
|
@ApiOperation("Gets latest journals")
|
||||||
public Page<BaseCommentDTO> pageBy(Pageable pageable) {
|
public Page<JournalWithCmtCountDTO> pageBy(Pageable pageable) {
|
||||||
Page<Journal> journalPage = journalService.pageBy(pageable);
|
Page<Journal> journalPage = journalService.listAll(pageable);
|
||||||
return journalService.convertTo(journalPage);
|
return journalService.convertToCmtCountDto(journalPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("latest")
|
@GetMapping("latest")
|
||||||
@ApiOperation("Gets latest journals")
|
@ApiOperation("Gets latest journals")
|
||||||
public List<BaseCommentDTO> pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) {
|
public List<JournalWithCmtCountDTO> pageLatest(@RequestParam(name = "top", defaultValue = "10") int top) {
|
||||||
List<Journal> journals = journalService.pageLatest(top).getContent();
|
List<Journal> journals = journalService.pageLatest(top).getContent();
|
||||||
return journalService.convertTo(journals);
|
return journalService.convertToCmtCountDto(journals);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@ApiOperation("Creates a journal")
|
@ApiOperation("Creates a journal")
|
||||||
public BaseCommentDTO createBy(@RequestBody JournalParam journalParam) {
|
public JournalDTO createBy(@RequestBody @Valid JournalParam journalParam) {
|
||||||
Journal createdJournal = journalService.createBy(journalParam);
|
Journal createdJournal = journalService.createBy(journalParam);
|
||||||
return journalService.convertTo(createdJournal);
|
return journalService.convertTo(createdJournal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,21 @@
|
||||||
package run.halo.app.model.dto;
|
package run.halo.app.model.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import run.halo.app.model.dto.base.OutputConverter;
|
||||||
|
import run.halo.app.model.entity.Journal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal dto.
|
* Journal dto.
|
||||||
*
|
*
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
* @date 19-4-24
|
* @date 19-4-24
|
||||||
*/
|
*/
|
||||||
public class JournalDTO extends BaseCommentDTO {
|
@Data
|
||||||
|
public class JournalDTO implements OutputConverter<JournalDTO, Journal> {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
private Long likes;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package run.halo.app.model.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Journal with comment count dto.
|
||||||
|
*
|
||||||
|
* @author johnniang
|
||||||
|
* @date 19-4-25
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class JournalWithCmtCountDTO extends JournalDTO {
|
||||||
|
|
||||||
|
private Long commentCount;
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package run.halo.app.model.entity;
|
package run.halo.app.model.entity;
|
||||||
|
|
||||||
import run.halo.app.model.enums.PostCreateFrom;
|
|
||||||
import run.halo.app.model.enums.PostStatus;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import org.hibernate.annotations.SQLDelete;
|
import org.hibernate.annotations.SQLDelete;
|
||||||
import org.hibernate.annotations.Where;
|
import org.hibernate.annotations.Where;
|
||||||
|
import run.halo.app.model.enums.PostCreateFrom;
|
||||||
|
import run.halo.app.model.enums.PostStatus;
|
||||||
import run.halo.app.utils.MarkdownUtils;
|
import run.halo.app.utils.MarkdownUtils;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
@ -143,10 +143,6 @@ public class BasePost extends BaseEntity {
|
||||||
thumbnail = "";
|
thumbnail = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visits == null) {
|
|
||||||
visits = 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (disallowComment == null) {
|
if (disallowComment == null) {
|
||||||
disallowComment = false;
|
disallowComment = false;
|
||||||
}
|
}
|
||||||
|
@ -167,7 +163,11 @@ public class BasePost extends BaseEntity {
|
||||||
createFrom = PostCreateFrom.ADMIN;
|
createFrom = PostCreateFrom.ADMIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (likes == null) {
|
if (visits == null || visits < 0) {
|
||||||
|
visits = 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (likes == null || likes < 0) {
|
||||||
likes = 0L;
|
likes = 0L;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
package run.halo.app.model.entity;
|
package run.halo.app.model.entity;
|
||||||
|
|
||||||
import javax.persistence.DiscriminatorValue;
|
import lombok.Data;
|
||||||
import javax.persistence.Entity;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.hibernate.annotations.SQLDelete;
|
||||||
|
import org.hibernate.annotations.Where;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal entity
|
* Journal entity
|
||||||
|
@ -9,17 +14,33 @@ import javax.persistence.Entity;
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
* @date 3/22/19
|
* @date 3/22/19
|
||||||
*/
|
*/
|
||||||
@Entity(name = "Journal")
|
@Entity
|
||||||
@DiscriminatorValue("2")
|
@Table(name = "journals")
|
||||||
public class Journal extends BaseComment {
|
@SQLDelete(sql = "update journals set deleted = true where id = ?")
|
||||||
|
@Where(clause = "deleted = false")
|
||||||
|
@Data
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class Journal extends BaseEntity {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Column(name = "content", columnDefinition = "varchar(1023) not null")
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@Column(name = "likes", columnDefinition = "bigint default 0")
|
||||||
|
private Long likes;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prePersist() {
|
public void prePersist() {
|
||||||
super.prePersist();
|
super.prePersist();
|
||||||
|
|
||||||
if (getPostId() == null) {
|
id = null;
|
||||||
setPostId(0);
|
|
||||||
|
if (likes == null || likes < 0) {
|
||||||
|
likes = 0L;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,6 @@ import lombok.Data;
|
||||||
import run.halo.app.model.dto.base.InputConverter;
|
import run.halo.app.model.dto.base.InputConverter;
|
||||||
import run.halo.app.model.entity.Journal;
|
import run.halo.app.model.entity.Journal;
|
||||||
|
|
||||||
import javax.validation.constraints.Email;
|
|
||||||
import javax.validation.constraints.Min;
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
@ -18,22 +16,7 @@ import javax.validation.constraints.Size;
|
||||||
@Data
|
@Data
|
||||||
public class JournalParam implements InputConverter<Journal> {
|
public class JournalParam implements InputConverter<Journal> {
|
||||||
|
|
||||||
@NotBlank(message = "Author name must not be blank")
|
|
||||||
@Size(max = 50, message = "Length of comment author name must not be more than {max}")
|
|
||||||
private String author;
|
|
||||||
|
|
||||||
@NotBlank(message = "Email must not be blank")
|
|
||||||
@Email(message = "Email's format is incorrect")
|
|
||||||
@Size(max = 255, message = "Length of comment email must not be more than {max}")
|
|
||||||
private String email;
|
|
||||||
|
|
||||||
@Size(max = 127, message = "Length of comment author url must not be more than {max}")
|
|
||||||
private String authorUrl;
|
|
||||||
|
|
||||||
@NotBlank(message = "Content must not be blank")
|
@NotBlank(message = "Content must not be blank")
|
||||||
@Size(max = 511, message = "Length of comment content must not be more than {max}")
|
@Size(max = 511, message = "Length of comment content must not be more than {max}")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@Min(value = 0, message = "Parent id must not be less than {value}")
|
|
||||||
private Long parentId = 0L;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
package run.halo.app.repository;
|
package run.halo.app.repository;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.lang.NonNull;
|
|
||||||
import run.halo.app.model.entity.Journal;
|
import run.halo.app.model.entity.Journal;
|
||||||
import run.halo.app.model.projection.CommentCountProjection;
|
import run.halo.app.repository.base.BaseRepository;
|
||||||
import run.halo.app.repository.base.BaseCommentRepository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal repository.
|
* Journal repository.
|
||||||
|
@ -16,24 +9,6 @@ import java.util.List;
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
* @date 3/22/19
|
* @date 3/22/19
|
||||||
*/
|
*/
|
||||||
public interface JournalRepository extends BaseCommentRepository<Journal> {
|
public interface JournalRepository extends BaseRepository<Journal, Integer> {
|
||||||
|
|
||||||
/**
|
|
||||||
* Counts comment count by post id collection.
|
|
||||||
*
|
|
||||||
* @param postIds post id collection must not be null
|
|
||||||
* @return a list of comment count
|
|
||||||
*/
|
|
||||||
@Query("select new run.halo.app.model.projection.CommentCountProjection(count(comment.id), comment.postId) from Journal comment where comment.postId in ?1 group by comment.postId")
|
|
||||||
@NonNull
|
|
||||||
List<CommentCountProjection> countByPostIds(@NonNull Iterable<Integer> postIds);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds all journals by parent id.
|
|
||||||
*
|
|
||||||
* @param parentId parent id must not be null
|
|
||||||
* @param pageable page info must not be null
|
|
||||||
* @return a page of journal
|
|
||||||
*/
|
|
||||||
Page<Journal> findAllByParentId(@NonNull Long parentId, @NonNull Pageable pageable);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,14 @@ package run.halo.app.service;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
import run.halo.app.model.dto.JournalDTO;
|
||||||
|
import run.halo.app.model.dto.JournalWithCmtCountDTO;
|
||||||
import run.halo.app.model.entity.Journal;
|
import run.halo.app.model.entity.Journal;
|
||||||
import run.halo.app.model.params.JournalParam;
|
import run.halo.app.model.params.JournalParam;
|
||||||
import run.halo.app.service.base.BaseCommentService;
|
import run.halo.app.service.base.CrudService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal service interface.
|
* Journal service interface.
|
||||||
|
@ -13,7 +18,7 @@ import run.halo.app.service.base.BaseCommentService;
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
* @date 19-4-24
|
* @date 19-4-24
|
||||||
*/
|
*/
|
||||||
public interface JournalService extends BaseCommentService<Journal> {
|
public interface JournalService extends CrudService<Journal, Integer> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a journal.
|
* Creates a journal.
|
||||||
|
@ -25,10 +30,46 @@ public interface JournalService extends BaseCommentService<Journal> {
|
||||||
Journal createBy(@NonNull JournalParam journalParam);
|
Journal createBy(@NonNull JournalParam journalParam);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a page of journal
|
* Gets latest journals.
|
||||||
*
|
*
|
||||||
* @param pageable page info must not be null
|
* @param top max size
|
||||||
* @return a page of journal
|
* @return latest journal page
|
||||||
*/
|
*/
|
||||||
Page<Journal> pageBy(@NonNull Pageable pageable);
|
Page<Journal> pageLatest(int top);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to journal dto.
|
||||||
|
*
|
||||||
|
* @param journal journal must not be null
|
||||||
|
* @return journal dto
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
JournalDTO convertTo(@NonNull Journal journal);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to journal with comment count dto.
|
||||||
|
*
|
||||||
|
* @param journal journal must not be null
|
||||||
|
* @return journal with comment count dto
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
JournalWithCmtCountDTO convertToCmtCountDto(@NonNull Journal journal);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to journal with comment count dto list.
|
||||||
|
*
|
||||||
|
* @param journals journal list
|
||||||
|
* @return journal with comment count dto list
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
List<JournalWithCmtCountDTO> convertToCmtCountDto(@Nullable List<Journal> journals);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to journal with comment count dto page.
|
||||||
|
*
|
||||||
|
* @param journalPage journal page must not be null
|
||||||
|
* @return a page of journal with comment count dto
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
Page<JournalWithCmtCountDTO> convertToCmtCountDto(@NonNull Page<Journal> journalPage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.data.jpa.domain.Specification;
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
|
@ -78,7 +77,7 @@ public abstract class BaseCommentServiceImpl<COMMENT extends BaseComment> extend
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<COMMENT> pageLatest(int top) {
|
public Page<COMMENT> pageLatest(int top) {
|
||||||
return listAll(buildLatestPageable(top));
|
return listAll(ServiceUtils.buildLatestPageable(top));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -417,16 +416,4 @@ public abstract class BaseCommentServiceImpl<COMMENT extends BaseComment> extend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds latest page request.
|
|
||||||
*
|
|
||||||
* @param top top must not be less than 1
|
|
||||||
* @return latest page request
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
Pageable buildLatestPageable(int top) {
|
|
||||||
Assert.isTrue(top > 0, "Top number must not be less than 0");
|
|
||||||
|
|
||||||
return PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, "createTime"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,19 @@
|
||||||
package run.halo.app.service.impl;
|
package run.halo.app.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import run.halo.app.exception.ForbiddenException;
|
import run.halo.app.model.dto.JournalDTO;
|
||||||
|
import run.halo.app.model.dto.JournalWithCmtCountDTO;
|
||||||
import run.halo.app.model.entity.Journal;
|
import run.halo.app.model.entity.Journal;
|
||||||
import run.halo.app.model.entity.User;
|
|
||||||
import run.halo.app.model.params.JournalParam;
|
import run.halo.app.model.params.JournalParam;
|
||||||
import run.halo.app.model.properties.BlogProperties;
|
|
||||||
import run.halo.app.repository.JournalRepository;
|
import run.halo.app.repository.JournalRepository;
|
||||||
import run.halo.app.repository.PostRepository;
|
|
||||||
import run.halo.app.security.authentication.Authentication;
|
|
||||||
import run.halo.app.security.context.SecurityContextHolder;
|
|
||||||
import run.halo.app.service.JournalService;
|
import run.halo.app.service.JournalService;
|
||||||
import run.halo.app.service.OptionService;
|
import run.halo.app.service.base.AbstractCrudService;
|
||||||
import run.halo.app.utils.ServiceUtils;
|
import run.halo.app.utils.ServiceUtils;
|
||||||
import run.halo.app.utils.ValidationUtils;
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Journal service implementation.
|
* Journal service implementation.
|
||||||
|
@ -27,15 +22,12 @@ import run.halo.app.utils.ValidationUtils;
|
||||||
* @date 19-4-24
|
* @date 19-4-24
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class JournalServiceImpl extends BaseCommentServiceImpl<Journal> implements JournalService {
|
public class JournalServiceImpl extends AbstractCrudService<Journal, Integer> implements JournalService {
|
||||||
|
|
||||||
private final JournalRepository journalRepository;
|
private final JournalRepository journalRepository;
|
||||||
|
|
||||||
public JournalServiceImpl(JournalRepository journalRepository,
|
public JournalServiceImpl(JournalRepository journalRepository) {
|
||||||
PostRepository postRepository,
|
super(journalRepository);
|
||||||
OptionService optionService,
|
|
||||||
ApplicationEventPublisher eventPublisher) {
|
|
||||||
super(journalRepository, postRepository, optionService, eventPublisher);
|
|
||||||
this.journalRepository = journalRepository;
|
this.journalRepository = journalRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,40 +35,36 @@ public class JournalServiceImpl extends BaseCommentServiceImpl<Journal> implemen
|
||||||
public Journal createBy(JournalParam journalParam) {
|
public Journal createBy(JournalParam journalParam) {
|
||||||
Assert.notNull(journalParam, "Journal param must not be null");
|
Assert.notNull(journalParam, "Journal param must not be null");
|
||||||
|
|
||||||
// Check user login status
|
return create(journalParam.convertTo());
|
||||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
||||||
|
|
||||||
if (authentication != null) {
|
|
||||||
// Get user detail
|
|
||||||
User user = authentication.getDetail().getUser();
|
|
||||||
// Set some default value
|
|
||||||
journalParam.setAuthor(StringUtils.isBlank(user.getNickname()) ? user.getUsername() : user.getNickname());
|
|
||||||
journalParam.setAuthorUrl(optionService.getByPropertyOfNullable(BlogProperties.BLOG_URL));
|
|
||||||
journalParam.setEmail(user.getEmail());
|
|
||||||
} else {
|
|
||||||
// Guest comment
|
|
||||||
if (ServiceUtils.isEmptyId(journalParam.getParentId())) {
|
|
||||||
throw new ForbiddenException("You have no right to create a journal");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate the journal param
|
|
||||||
ValidationUtils.validate(journalParam);
|
|
||||||
|
|
||||||
// Convert, create and return
|
|
||||||
return createBy(journalParam.convertTo());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Page<Journal> pageBy(Pageable pageable) {
|
|
||||||
Assert.notNull(pageable, "Page info must not be null");
|
|
||||||
|
|
||||||
return journalRepository.findAllByParentId(0L, pageable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<Journal> pageLatest(int top) {
|
public Page<Journal> pageLatest(int top) {
|
||||||
return pageBy(buildLatestPageable(top));
|
return listAll(ServiceUtils.buildLatestPageable(top));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JournalDTO convertTo(Journal journal) {
|
||||||
|
Assert.notNull(journal, "Journal must not be null");
|
||||||
|
|
||||||
|
return new JournalDTO().convertFrom(journal);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JournalWithCmtCountDTO convertToCmtCountDto(Journal journal) {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<JournalWithCmtCountDTO> convertToCmtCountDto(List<Journal> journals) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<JournalWithCmtCountDTO> convertToCmtCountDto(Page<Journal> journalPage) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package run.halo.app.utils;
|
package run.halo.app.utils;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.lang.NonNull;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
@ -116,4 +120,30 @@ public class ServiceUtils {
|
||||||
public static boolean isEmptyId(@Nullable Number id) {
|
public static boolean isEmptyId(@Nullable Number id) {
|
||||||
return id == null || id.longValue() <= 0;
|
return id == null || id.longValue() <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds latest page request.
|
||||||
|
*
|
||||||
|
* @param top top must not be less than 1
|
||||||
|
* @return latest page request
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static Pageable buildLatestPageable(int top) {
|
||||||
|
return buildLatestPageable(top, "createTime");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds latest page request.
|
||||||
|
*
|
||||||
|
* @param top top must not be less than 1
|
||||||
|
* @param sortProperty sort property must not be blank
|
||||||
|
* @return latest page request
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static Pageable buildLatestPageable(int top, @NonNull String sortProperty) {
|
||||||
|
Assert.isTrue(top > 0, "Top number must not be less than 0");
|
||||||
|
Assert.hasText(sortProperty, "Sort property must not be blank");
|
||||||
|
|
||||||
|
return PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, sortProperty));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue