complete list latest posts service

pull/137/head
johnniang 2019-03-14 14:37:16 +08:00
parent 6b06ac4264
commit 5a1327ade7
12 changed files with 189 additions and 6 deletions

View File

@ -0,0 +1,24 @@
package cc.ryanc.halo.model.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* Post detail output dto.
*/
@Data
@ToString
@EqualsAndHashCode(callSuper = true)
public class PostDetailOutputDTO extends PostSimpleOutputDTO {
/**
*
*/
private String originalContent;
/**
*
*/
private String formatContent;
}

View File

@ -0,0 +1,97 @@
package cc.ryanc.halo.model.dto;
import cc.ryanc.halo.model.dto.base.OutputConverter;
import cc.ryanc.halo.model.entity.Post;
import cc.ryanc.halo.model.enums.PostCreateFrom;
import cc.ryanc.halo.model.enums.PostType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.Date;
/**
* Page simple output dto.
*
* @author johnniang
*/
@Data
@ToString
@EqualsAndHashCode
public class PostSimpleOutputDTO implements OutputConverter<PostSimpleOutputDTO, Post> {
private Integer id;
/**
*
*/
private String title;
/**
*
* 0:
* 1:
* 2:
*/
private PostType type;
/**
*
*/
private String summary;
/**
*
*/
private String thumbnail;
/**
*
*/
private Long visits;
/**
*
*/
private Boolean disallowComment;
/**
*
*/
private String password;
/**
*
*/
private String template;
/**
*
*/
private Integer topPriority;
/**
*
*/
private PostCreateFrom createFrom;
/**
* /
*/
private Long likes;
/**
*
*/
private Date createTime;
/**
*
*/
private Date updateTime;
/**
* Edit time.
*/
private Date editTime;
}

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "attachments") @Table(name = "attachments")
@SQLDelete(sql = "update attachments set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class Attachment { public class Attachment {
@Id @Id

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "galleries") @Table(name = "galleries")
@SQLDelete(sql = "update galleries set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class Gallery { public class Gallery {
@Id @Id

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "links") @Table(name = "links")
@SQLDelete(sql = "update links set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class Link { public class Link {
@Id @Id

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "menus") @Table(name = "menus")
@SQLDelete(sql = "update menus set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class Menu { public class Menu {
@Id @Id

View File

@ -110,6 +110,13 @@ public class Post {
@Column(name = "likes", columnDefinition = "bigint default 0") @Column(name = "likes", columnDefinition = "bigint default 0")
private Long likes; private Long likes;
/**
* Edit time.
*/
@Column(name = "edit_time", columnDefinition = "timestamp default CURRENT_TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
private Date editTime;
/** /**
* *
*/ */

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "menus") @Table(name = "menus")
@SQLDelete(sql = "update menus set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class Tag { public class Tag {
@Id @Id

View File

@ -1,6 +1,8 @@
package cc.ryanc.halo.model.entity; package cc.ryanc.halo.model.entity;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@ -14,6 +16,8 @@ import java.util.Date;
@Data @Data
@Entity @Entity
@Table(name = "users") @Table(name = "users")
@SQLDelete(sql = "update users set deleted = true where id = ?")
@Where(clause = "deleted = false")
public class User { public class User {
@Id @Id

View File

@ -1,7 +1,10 @@
package cc.ryanc.halo.service; package cc.ryanc.halo.service;
import cc.ryanc.halo.model.dto.PostSimpleOutputDTO;
import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.model.entity.Post;
import cc.ryanc.halo.service.base.CrudService; import cc.ryanc.halo.service.base.CrudService;
import org.springframework.data.domain.Page;
import org.springframework.lang.NonNull;
/** /**
* Post service. * Post service.
@ -10,4 +13,13 @@ import cc.ryanc.halo.service.base.CrudService;
*/ */
public interface PostService extends CrudService<Post, Integer> { public interface PostService extends CrudService<Post, Integer> {
/**
* Lists latest posts.
*
* @param top top number must not be less than 0
* @return latest posts
*/
@NonNull
Page<PostSimpleOutputDTO> listLatest(int top);
} }

View File

@ -1,10 +1,15 @@
package cc.ryanc.halo.service.impl; package cc.ryanc.halo.service.impl;
import cc.ryanc.halo.model.dto.PostSimpleOutputDTO;
import cc.ryanc.halo.model.entity.Post; import cc.ryanc.halo.model.entity.Post;
import cc.ryanc.halo.repository.PostRepository; import cc.ryanc.halo.repository.PostRepository;
import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.service.PostService;
import cc.ryanc.halo.service.base.AbstractCrudService; import cc.ryanc.halo.service.base.AbstractCrudService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
/** /**
* Post service implementation. * Post service implementation.
@ -20,4 +25,15 @@ public class PostServiceImpl extends AbstractCrudService<Post, Integer> implemen
super(postRepository); super(postRepository);
this.postRepository = postRepository; this.postRepository = postRepository;
} }
@Override
public Page<PostSimpleOutputDTO> listLatest(int top) {
Assert.isTrue(top > 0, "Top number must not be less than 0");
PageRequest latestPageable = PageRequest.of(0, top, Sort.by(Sort.Direction.DESC, "editTime"));
Page<Post> posts = listAll(latestPageable);
return posts.map(post -> new PostSimpleOutputDTO().convertFrom(post));
}
} }

View File

@ -1,8 +1,10 @@
package cc.ryanc.halo.web.controller.admin; package cc.ryanc.halo.web.controller.admin;
import cc.ryanc.halo.model.dto.PostSimpleOutputDTO;
import cc.ryanc.halo.service.AttachmentService; import cc.ryanc.halo.service.AttachmentService;
import cc.ryanc.halo.service.CommentService; import cc.ryanc.halo.service.CommentService;
import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.service.PostService;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -40,13 +42,14 @@ public class AdminController {
*/ */
@GetMapping(value = {"", "/index"}) @GetMapping(value = {"", "/index"})
public String admin(Model model) { public String admin(Model model) {
final Long postsCount = postService.count();
final Long commentsCount = commentService.count();
final Long attachmentsCount = attachmentService.count();
model.addAttribute("postsCount", postsCount); Page<PostSimpleOutputDTO> postPage = postService.listLatest(10);
model.addAttribute("commentsCount", commentsCount);
model.addAttribute("attachmentsCount", attachmentsCount); model.addAttribute("postsCount", postPage.getTotalElements());
model.addAttribute("commentsCount", commentService.count());
model.addAttribute("attachmentsCount", attachmentService.count());
model.addAttribute("latestPosts", postPage.getContent());
return "admin/admin_index"; return "admin/admin_index";
} }
} }