diff --git a/.travis.yml b/.travis.yml index 32426fcbe..ee0bf3765 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,15 @@ language: java jdk: - oraclejdk8 +cache: + directories: + - .autoconf + - $HOME/.m2 script: - mvn clean package -Pci branches: only: - master notifications: - webhooks: https://fathomless-fjord-24024.herokuapp.com/notify + webhooks: + - https://fathomless-fjord-24024.herokuapp.com/notify diff --git a/src/main/java/cc/ryanc/halo/model/domain/Post.java b/src/main/java/cc/ryanc/halo/model/domain/Post.java index 5d871abd2..3116de286 100755 --- a/src/main/java/cc/ryanc/halo/model/domain/Post.java +++ b/src/main/java/cc/ryanc/halo/model/domain/Post.java @@ -6,7 +6,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.ToString; -import org.hibernate.annotations.ColumnDefault; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; diff --git a/src/main/java/cc/ryanc/halo/model/entity/Category.java b/src/main/java/cc/ryanc/halo/model/entity/Category.java new file mode 100644 index 000000000..d18171e64 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/Category.java @@ -0,0 +1,53 @@ +package cc.ryanc.halo.model.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Category entity. + * + * @author johnniang + */ +@Entity +@Table(name = "categories") +@SQLDelete(sql = "update categories set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class Category { + + @Id + @GeneratedValue + private Integer id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "tinyint default 0") + private Boolean deleted; + + @Column(name = "name", columnDefinition = "varchar(50) not null") + private String name; + + @Column(name = "snake_name", columnDefinition = "varchar(50) not null") + private String snakeName; + + @Column(name = "description", columnDefinition = "varchar(100) default ''") + private String description; + + @Column(name = "parent_id", columnDefinition = "int default 0") + private Integer parentId; + +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/Comment.java b/src/main/java/cc/ryanc/halo/model/entity/Comment.java new file mode 100644 index 000000000..ba69618a2 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/Comment.java @@ -0,0 +1,64 @@ +package cc.ryanc.halo.model.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Comment entity. + * + * @author johnniang + */ +@Entity +@Table(name = "comments") +@SQLDelete(sql = "update comments set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class Comment { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "tinyint default 0") + private Boolean deleted; + + @Column(name = "author", columnDefinition = "varchar(50) not null") + private String author; + + @Column(name = "email", columnDefinition = "varchar(50) default ''") + private String email; + + @Column(name = "ip_address", columnDefinition = "varchar(127) default ''") + private String ipAddress; + + @Column(name = "gavatar_md5", columnDefinition = "varchar(128) default ''") + private String gavatarMd5; + + @Column(name = "content", columnDefinition = "varchar(1024) not null") + private String content; + + @Column(name = "user_agent", columnDefinition = "varchar(512) default ''") + private String userAgent; + + @Column(name = "is_admin", columnDefinition = "tinyint default 0") + private Boolean isAdmin; + + @Column(name = "parent_id", columnDefinition = "bigint default 0") + private Long parentId; +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/Log.java b/src/main/java/cc/ryanc/halo/model/entity/Log.java new file mode 100644 index 000000000..8b6037788 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/Log.java @@ -0,0 +1,55 @@ +package cc.ryanc.halo.model.entity; + + +import cc.ryanc.halo.model.entity.enums.LogType; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Log entity. + * + * @author johnniang + */ +@Entity +@Table(name = "logs") +@SQLDelete(sql = "update logs set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class Log { + + @Id + @GeneratedValue + private Long id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "tinyint default 0") + private Boolean deleted; + + @Column(name = "log_key", columnDefinition = "varchar(1023) default ''") + private String logKey; + + @Column(name = "type", columnDefinition = "int not null") + private LogType type; + + @Column(name = "content", columnDefinition = "varchar(1023) not null") + private String content; + + @Column(name = "ip_address", columnDefinition = "varchar(127) default ''") + private String ipAddress; + +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/Option.java b/src/main/java/cc/ryanc/halo/model/entity/Option.java new file mode 100644 index 000000000..e579ce0af --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/Option.java @@ -0,0 +1,47 @@ +package cc.ryanc.halo.model.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Setting entity. + * + * @author johnniang + */ +@Entity +@Table(name = "options") +@SQLDelete(sql = "update options set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class Option { + + @Id + @GeneratedValue + private Integer id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "TINYINT default 0") + private Boolean deleted; + + @Column(name = "option_key", columnDefinition = "varchar(100) not null") + private String optionKey; + + @Column(name = "option_value", columnDefinition = "varchar(1023) not null") + private String optionValue; + +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/Post.java b/src/main/java/cc/ryanc/halo/model/entity/Post.java new file mode 100644 index 000000000..300e290b5 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/Post.java @@ -0,0 +1,81 @@ +package cc.ryanc.halo.model.entity; + +import cc.ryanc.halo.model.entity.enums.PostCreateFrom; +import cc.ryanc.halo.model.entity.enums.PostType; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Post entity. + * + * @author johnniang + */ +@Entity +@Table(name = "posts") +@SQLDelete(sql = "update posts set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class Post { + + @Id + @GeneratedValue + private Integer id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "tinyint default 0") + private Boolean deleted; + + @Column(name = "title", columnDefinition = "varchar(100) not null") + private String title; + + @Column(name = "type", columnDefinition = "int default 0") + private PostType type; + + @Column(name = "original_content", columnDefinition = "text not null") + private String originalContent; + + @Column(name = "format_content", columnDefinition = "text not null") + private String formatContent; + + @Column(name = "summary", columnDefinition = "varchar(500) default ''") + private String summary; + + @Column(name = "thumbnail", columnDefinition = "varchar(1023) default ''") + private String thumbnail; + + @Column(name = "visits", columnDefinition = "bigint default 0") + private Long visits; + + @Column(name = "disallow_comment", columnDefinition = "int default 0") + private Boolean disallowComment; + + @Column(name = "password", columnDefinition = "varchar(255) default ''") + private String password; + + @Column(name = "template", columnDefinition = "varchar(255) default ''") + private String template; + + @Column(name = "top_priority", columnDefinition = "int default 0") + private Integer topPriority; + + @Column(name = "create_from", columnDefinition = "int default 0") + private PostCreateFrom createFrom; + + @Column(name = "likes", columnDefinition = "bigint default 0") + private Long likes; +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/PostCategory.java b/src/main/java/cc/ryanc/halo/model/entity/PostCategory.java new file mode 100644 index 000000000..b4aecb27c --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/PostCategory.java @@ -0,0 +1,46 @@ +package cc.ryanc.halo.model.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import javax.persistence.*; +import java.util.Date; + +/** + * Post category entity. + * + * @author johnniang + */ +@Entity +@Table(name = "post_categories") +@SQLDelete(sql = "update post_categories set deleted = true where id = ?") +@Where(clause = "deleted = false") +@Data +@ToString +@EqualsAndHashCode +public class PostCategory { + + @Id + @GeneratedValue + private Integer id; + + @Column(name = "create_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + @Column(name = "update_time", columnDefinition = "timestamp default CURRENT_TIME") + @Temporal(TemporalType.TIMESTAMP) + private Date updateTime; + + @Column(name = "deleted", columnDefinition = "tinyint default 0") + private Boolean deleted; + + @Column(name = "category_id") + private Integer categoryId; + + @Column(name = "post_id") + private Integer postId; +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/enums/CommentStatus.java b/src/main/java/cc/ryanc/halo/model/entity/enums/CommentStatus.java new file mode 100644 index 000000000..d7da65069 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/enums/CommentStatus.java @@ -0,0 +1,24 @@ +package cc.ryanc.halo.model.entity.enums; + +/** + * Comment status. + * + * @author johnniang + */ +public enum CommentStatus implements ValueEnum { + + PUBLISHED(0), + AUDITING(1), + RECYCLE(2); + + private final Integer value; + + CommentStatus(Integer value) { + this.value = value; + } + + @Override + public Integer getValue() { + return value; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/enums/LogType.java b/src/main/java/cc/ryanc/halo/model/entity/enums/LogType.java new file mode 100644 index 000000000..e37877acd --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/enums/LogType.java @@ -0,0 +1,22 @@ +package cc.ryanc.halo.model.entity.enums; + +/** + * Log type. + * + * @author johnniang + */ +public enum LogType implements ValueEnum { + ; + + private final Integer value; + + LogType(Integer value) { + this.value = value; + } + + + @Override + public Integer getValue() { + return value; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/enums/PostCreateFrom.java b/src/main/java/cc/ryanc/halo/model/entity/enums/PostCreateFrom.java new file mode 100644 index 000000000..ed6412703 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/enums/PostCreateFrom.java @@ -0,0 +1,23 @@ +package cc.ryanc.halo.model.entity.enums; + +/** + * Post create from type. + * + * @author johnniang + */ +public enum PostCreateFrom implements ValueEnum { + + ADMIN(0), + WECHAT(1); + + private final Integer value; + + PostCreateFrom(Integer value) { + this.value = value; + } + + @Override + public Integer getValue() { + return value; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/enums/PostType.java b/src/main/java/cc/ryanc/halo/model/entity/enums/PostType.java new file mode 100644 index 000000000..054af7ddf --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/enums/PostType.java @@ -0,0 +1,24 @@ +package cc.ryanc.halo.model.entity.enums; + +/** + * Post type. + * + * @author johnniang + */ +public enum PostType implements ValueEnum { + + POST(0), + PAGE(1), + JOURNAL(2); + + private final Integer value; + + PostType(Integer value) { + this.value = value; + } + + @Override + public Integer getValue() { + return value; + } +} diff --git a/src/main/java/cc/ryanc/halo/model/entity/enums/ValueEnum.java b/src/main/java/cc/ryanc/halo/model/entity/enums/ValueEnum.java new file mode 100644 index 000000000..18917e622 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/entity/enums/ValueEnum.java @@ -0,0 +1,41 @@ +package cc.ryanc.halo.model.entity.enums; + +import org.springframework.util.Assert; + +import java.util.stream.Stream; + +/** + * Interface for value enum. + * + * @param value type + * @author johnniang + */ +public interface ValueEnum { + + /** + * Get enum value. + * + * @return enum value + */ + T getValue(); + + /** + * Convert value to corresponding enum. + * + * @param enumType enum type + * @param value database value + * @param value generic + * @param enum generic + * @return corresponding enum + */ + static > E valueToEnum(Class enumType, V value) { + Assert.notNull(enumType, "enum type must not be null"); + Assert.notNull(value, "value must not be null"); + Assert.isTrue(enumType.isEnum(), "type must be an enum type"); + + return Stream.of(enumType.getEnumConstants()) + .filter(item -> item.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("unknown database value: " + value)); + } +}