From 819c999dcf7d65f68ff6645c48b1751af8839f24 Mon Sep 17 00:00:00 2001 From: johnniang Date: Wed, 24 Apr 2019 13:40:20 +0800 Subject: [PATCH] Build base structure of mixed entities --- .../halo/app/model/entity/BaseComment.java | 138 ++++++++++++++++++ .../run/halo/app/model/entity/BasePost.java | 4 +- .../run/halo/app/model/entity/Comment.java | 132 +---------------- .../run/halo/app/model/entity/Journal.java | 2 +- .../halo/app/model/entity/SheetComment.java | 16 ++ .../app/repository/CommentRepository.java | 22 +-- .../app/repository/JournalRepository.java | 5 +- .../repository/SheetCommentRepository.java | 14 ++ .../halo/app/repository/SheetRepository.java | 2 +- .../base/BaseCommentRepository.java | 30 ++++ .../run/halo/app/service/JournalService.java | 13 ++ .../halo/app/service/SheetCommentService.java | 14 ++ .../run/halo/app/service/SheetService.java | 14 ++ 13 files changed, 255 insertions(+), 151 deletions(-) create mode 100644 src/main/java/run/halo/app/model/entity/BaseComment.java create mode 100644 src/main/java/run/halo/app/model/entity/SheetComment.java create mode 100644 src/main/java/run/halo/app/repository/SheetCommentRepository.java create mode 100644 src/main/java/run/halo/app/repository/base/BaseCommentRepository.java create mode 100644 src/main/java/run/halo/app/service/JournalService.java create mode 100644 src/main/java/run/halo/app/service/SheetCommentService.java create mode 100644 src/main/java/run/halo/app/service/SheetService.java diff --git a/src/main/java/run/halo/app/model/entity/BaseComment.java b/src/main/java/run/halo/app/model/entity/BaseComment.java new file mode 100644 index 00000000..4f876a94 --- /dev/null +++ b/src/main/java/run/halo/app/model/entity/BaseComment.java @@ -0,0 +1,138 @@ +package run.halo.app.model.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; +import run.halo.app.model.enums.CommentStatus; + +import javax.persistence.*; + +/** + * Base comment entity. + * + * @author johnniang + */ +@Entity(name = "BaseComment") +@Table(name = "comments") +@SQLDelete(sql = "update comments set deleted = true where id = ?") +@Where(clause = "deleted = false") +@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER, columnDefinition = "int default 0") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class BaseComment extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * Commentator's name. + */ + @Column(name = "author", columnDefinition = "varchar(50) not null") + private String author; + + /** + * Commentator's email. + */ + @Column(name = "email", columnDefinition = "varchar(255) not null") + private String email; + + /** + * Commentator's ip address. + */ + @Column(name = "ip_address", columnDefinition = "varchar(127) default ''") + private String ipAddress; + + /** + * Commentator's website. + */ + @Column(name = "author_url", columnDefinition = "varchar(512) default ''") + private String authorUrl; + + /** + * Gavatar md5 + */ + @Column(name = "gavatar_md5", columnDefinition = "varchar(128) default ''") + private String gavatarMd5; + + /** + * Comment content. + */ + @Column(name = "content", columnDefinition = "varchar(1023) not null") + private String content; + + /** + * Comment status. + */ + @Column(name = "status", columnDefinition = "int default 1") + private CommentStatus status; + + /** + * Commentator's userAgent. + */ + @Column(name = "user_agent", columnDefinition = "varchar(512) default ''") + private String userAgent; + + /** + * Is admin's comment. + */ + @Column(name = "is_admin", columnDefinition = "tinyint default 0") + private Boolean isAdmin; + + /** + * Post id. + */ + @Column(name = "post_id", columnDefinition = "int not null") + private Integer postId; + + /** + * Whether to top the comment. + */ + @Column(name = "top_priority", columnDefinition = "int default 0") + private Integer topPriority; + + /** + * Parent comment. + */ + @Column(name = "parent_id", columnDefinition = "bigint default 0") + private Long parentId; + + @Override + public void prePersist() { + super.prePersist(); + id = null; + + if (parentId == null || parentId < 0) { + parentId = 0L; + } + + if (ipAddress == null) { + ipAddress = ""; + } + + if (authorUrl == null) { + authorUrl = ""; + } + + if (gavatarMd5 == null) { + gavatarMd5 = ""; + } + + if (status == null) { + status = CommentStatus.AUDITING; + } + + if (userAgent == null) { + userAgent = ""; + } + + if (isAdmin == null) { + isAdmin = false; + } + + } + +} diff --git a/src/main/java/run/halo/app/model/entity/BasePost.java b/src/main/java/run/halo/app/model/entity/BasePost.java index b7c14189..d0247ed5 100644 --- a/src/main/java/run/halo/app/model/entity/BasePost.java +++ b/src/main/java/run/halo/app/model/entity/BasePost.java @@ -17,13 +17,13 @@ import java.util.Date; * * @author johnniang */ -@Entity(name = "base_post") +@Entity(name = "BasePost") @Table(name = "posts", indexes = @Index(columnList = "url")) @SQLDelete(sql = "update posts set deleted = true where id = ?") @Where(clause = "deleted = false") @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER, columnDefinition = "int default 0") @Data -@ToString +@ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class BasePost extends BaseEntity { diff --git a/src/main/java/run/halo/app/model/entity/Comment.java b/src/main/java/run/halo/app/model/entity/Comment.java index 3f01b7c0..d9e4456e 100644 --- a/src/main/java/run/halo/app/model/entity/Comment.java +++ b/src/main/java/run/halo/app/model/entity/Comment.java @@ -1,137 +1,15 @@ package run.halo.app.model.entity; -import run.halo.app.model.enums.CommentStatus; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.hibernate.annotations.SQLDelete; -import org.hibernate.annotations.Where; - -import javax.persistence.*; +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; /** * Comment entity. * * @author johnniang */ -@Entity -@Table(name = "comments") -@SQLDelete(sql = "update comments set deleted = true where id = ?") -@Where(clause = "deleted = false") -@Data -@ToString -@EqualsAndHashCode(callSuper = true) -public class Comment extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - /** - * Commentator's name. - */ - @Column(name = "author", columnDefinition = "varchar(50) not null") - private String author; - - /** - * Commentator's email. - */ - @Column(name = "email", columnDefinition = "varchar(255) not null") - private String email; - - /** - * Commentator's ip address. - */ - @Column(name = "ip_address", columnDefinition = "varchar(127) default ''") - private String ipAddress; - - /** - * Commentator's website. - */ - @Column(name = "author_url", columnDefinition = "varchar(512) default ''") - private String authorUrl; - - /** - * Gavatar md5 - */ - @Column(name = "gavatar_md5", columnDefinition = "varchar(128) default ''") - private String gavatarMd5; - - /** - * Comment content. - */ - @Column(name = "content", columnDefinition = "varchar(1023) not null") - private String content; - - /** - * Comment status. - */ - @Column(name = "status", columnDefinition = "int default 1") - private CommentStatus status; - - /** - * Commentator's userAgent. - */ - @Column(name = "user_agent", columnDefinition = "varchar(512) default ''") - private String userAgent; - - /** - * Is admin's comment. - */ - @Column(name = "is_admin", columnDefinition = "tinyint default 0") - private Boolean isAdmin; - - /** - * Post id. - */ - @Column(name = "post_id", columnDefinition = "int not null") - private Integer postId; - - /** - * Whether to top the comment. - */ - @Column(name = "top_priority", columnDefinition = "int default 0") - private Integer topPriority; - - /** - * Parent comment. - */ - @Column(name = "parent_id", columnDefinition = "bigint default 0") - private Long parentId; - - @Override - public void prePersist() { - super.prePersist(); - id = null; - - if (parentId == null || parentId < 0) { - parentId = 0L; - } - - if (ipAddress == null) { - ipAddress = ""; - } - - if (authorUrl == null) { - authorUrl = ""; - } - - if (gavatarMd5 == null) { - gavatarMd5 = ""; - } - - if (status == null) { - status = CommentStatus.AUDITING; - } - - if (userAgent == null) { - userAgent = ""; - } - - if (isAdmin == null) { - isAdmin = false; - } - - } +@Entity(name = "Comment") +@DiscriminatorValue("0") +public class Comment extends BaseComment { } diff --git a/src/main/java/run/halo/app/model/entity/Journal.java b/src/main/java/run/halo/app/model/entity/Journal.java index 79bb6dc4..dbc27de4 100644 --- a/src/main/java/run/halo/app/model/entity/Journal.java +++ b/src/main/java/run/halo/app/model/entity/Journal.java @@ -11,6 +11,6 @@ import javax.persistence.Entity; */ @Entity(name = "Journal") @DiscriminatorValue("2") -public class Journal extends BasePost { +public class Journal extends BaseComment { } diff --git a/src/main/java/run/halo/app/model/entity/SheetComment.java b/src/main/java/run/halo/app/model/entity/SheetComment.java new file mode 100644 index 00000000..0819de82 --- /dev/null +++ b/src/main/java/run/halo/app/model/entity/SheetComment.java @@ -0,0 +1,16 @@ +package run.halo.app.model.entity; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +/** + * Sheet comment. + * + * @author johnniang + * @date 19-4-24 + */ +@Entity(name = "SheetComment") +@DiscriminatorValue("1") +public class SheetComment extends BaseComment { + +} diff --git a/src/main/java/run/halo/app/repository/CommentRepository.java b/src/main/java/run/halo/app/repository/CommentRepository.java index 9f8eef6d..6690f17c 100644 --- a/src/main/java/run/halo/app/repository/CommentRepository.java +++ b/src/main/java/run/halo/app/repository/CommentRepository.java @@ -1,15 +1,13 @@ package run.halo.app.repository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import run.halo.app.model.entity.Comment; -import run.halo.app.model.enums.CommentStatus; -import run.halo.app.model.projection.CommentCountProjection; -import run.halo.app.repository.base.BaseRepository; 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 org.springframework.lang.Nullable; +import run.halo.app.model.entity.Comment; +import run.halo.app.model.enums.CommentStatus; +import run.halo.app.model.projection.CommentCountProjection; +import run.halo.app.repository.base.BaseCommentRepository; import java.util.List; @@ -19,17 +17,7 @@ import java.util.List; * @author johnniang * @date 3/21/19 */ -public interface CommentRepository extends BaseRepository, JpaSpecificationExecutor { - - /** - * Finds all comments by status. - * - * @param status status must not be null - * @param pageable page info must not be null - * @return a page of comment - */ - @NonNull - Page findAllByStatus(@Nullable CommentStatus status, @NonNull Pageable pageable); +public interface CommentRepository extends BaseCommentRepository { /** * Finds all comments by post ids. diff --git a/src/main/java/run/halo/app/repository/JournalRepository.java b/src/main/java/run/halo/app/repository/JournalRepository.java index 78874dac..bf375a68 100644 --- a/src/main/java/run/halo/app/repository/JournalRepository.java +++ b/src/main/java/run/halo/app/repository/JournalRepository.java @@ -1,8 +1,7 @@ package run.halo.app.repository; import run.halo.app.model.entity.Journal; -import run.halo.app.repository.base.BasePostRepository; -import run.halo.app.repository.base.BasePostRepository; +import run.halo.app.repository.base.BaseCommentRepository; /** * Journal repository. @@ -10,6 +9,6 @@ import run.halo.app.repository.base.BasePostRepository; * @author johnniang * @date 3/22/19 */ -public interface JournalRepository extends BasePostRepository { +public interface JournalRepository extends BaseCommentRepository { } diff --git a/src/main/java/run/halo/app/repository/SheetCommentRepository.java b/src/main/java/run/halo/app/repository/SheetCommentRepository.java new file mode 100644 index 00000000..0d099c1a --- /dev/null +++ b/src/main/java/run/halo/app/repository/SheetCommentRepository.java @@ -0,0 +1,14 @@ +package run.halo.app.repository; + +import run.halo.app.model.entity.SheetComment; +import run.halo.app.repository.base.BaseCommentRepository; + +/** + * Sheet comment repository. + * + * @author johnniang + * @date 19-4-24 + */ +public interface SheetCommentRepository extends BaseCommentRepository { + +} diff --git a/src/main/java/run/halo/app/repository/SheetRepository.java b/src/main/java/run/halo/app/repository/SheetRepository.java index f63201e1..8356a740 100644 --- a/src/main/java/run/halo/app/repository/SheetRepository.java +++ b/src/main/java/run/halo/app/repository/SheetRepository.java @@ -4,7 +4,7 @@ import run.halo.app.model.entity.Sheet; import run.halo.app.repository.base.BasePostRepository; /** - * Page repository. + * Sheet repository. * * @author johnniang * @date 3/22/19 diff --git a/src/main/java/run/halo/app/repository/base/BaseCommentRepository.java b/src/main/java/run/halo/app/repository/base/BaseCommentRepository.java new file mode 100644 index 00000000..8632904e --- /dev/null +++ b/src/main/java/run/halo/app/repository/base/BaseCommentRepository.java @@ -0,0 +1,30 @@ +package run.halo.app.repository.base; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; +import run.halo.app.model.entity.BaseComment; +import run.halo.app.model.enums.CommentStatus; + +/** + * Base comment repository. + * + * @author johnniang + * @date 19-4-24 + */ +public interface BaseCommentRepository extends BaseRepository, JpaSpecificationExecutor { + + /** + * Finds all comments by status. + * + * @param status status must not be null + * @param pageable page info must not be null + * @return a page of comment + */ + @NonNull + Page findAllByStatus(@Nullable CommentStatus status, @NonNull Pageable pageable); + + +} diff --git a/src/main/java/run/halo/app/service/JournalService.java b/src/main/java/run/halo/app/service/JournalService.java new file mode 100644 index 00000000..eb301c43 --- /dev/null +++ b/src/main/java/run/halo/app/service/JournalService.java @@ -0,0 +1,13 @@ +package run.halo.app.service; + +import run.halo.app.model.entity.Journal; +import run.halo.app.service.base.CrudService; + +/** + * Journal service interface. + * + * @author johnniang + * @date 19-4-24 + */ +public interface JournalService extends CrudService { +} diff --git a/src/main/java/run/halo/app/service/SheetCommentService.java b/src/main/java/run/halo/app/service/SheetCommentService.java new file mode 100644 index 00000000..7fa8fc3b --- /dev/null +++ b/src/main/java/run/halo/app/service/SheetCommentService.java @@ -0,0 +1,14 @@ +package run.halo.app.service; + +import run.halo.app.model.entity.SheetComment; +import run.halo.app.service.base.CrudService; + +/** + * Sheet comment service interface. + * + * @author johnniang + * @date 19-4-24 + */ +public interface SheetCommentService extends CrudService { + +} diff --git a/src/main/java/run/halo/app/service/SheetService.java b/src/main/java/run/halo/app/service/SheetService.java new file mode 100644 index 00000000..93f7c0d6 --- /dev/null +++ b/src/main/java/run/halo/app/service/SheetService.java @@ -0,0 +1,14 @@ +package run.halo.app.service; + +import run.halo.app.model.entity.Sheet; +import run.halo.app.service.base.CrudService; + +/** + * Sheet service interface. + * + * @author johnniang + * @date 19-4-24 + */ +public interface SheetService extends CrudService { + +} -- GitLab