diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2021-01-30 14:43:39 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2021-01-30 14:43:39 +0100 |
commit | 67c6067083d491f7e239fe0d73a6ed16c637fb3b (patch) | |
tree | 5d98dfa415c3e97432e88f5135a5a583eed68c32 /src | |
parent | 4712c1ded9eced00cf7a364d173a375cdfd4686e (diff) |
KB66 Post: Add scope field.
The scope field defines whether a post is a top-level post or a
comment and is used to select posts for the main feed.
Change-Id: I44363e3e67acbecff9844730a513ddb1d554afaf
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java | 22 | ||||
-rw-r--r-- | src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java | 1 | ||||
-rw-r--r-- | src/main/resources/db/changeLog-1.8.xml | 58 | ||||
-rw-r--r-- | src/main/resources/db/changeLog.xml | 1 |
4 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java index 346b71f..3a16868 100644 --- a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java +++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java @@ -2,6 +2,7 @@ package eu.mulk.mulkcms2.benki.posts; import static java.util.stream.Collectors.toList; +import com.vladmihalcea.hibernate.type.basic.PostgreSQLEnumType; import eu.mulk.mulkcms2.benki.accesscontrol.Role; import eu.mulk.mulkcms2.benki.bookmarks.Bookmark; import eu.mulk.mulkcms2.benki.lazychat.LazychatMessage; @@ -28,6 +29,8 @@ import javax.json.bind.annotation.JsonbTransient; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -48,15 +51,23 @@ import javax.persistence.criteria.From; import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Predicate; import org.hibernate.Session; +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; import org.jboss.logging.Logger; @Entity @Table(name = "posts", schema = "benki") @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +@TypeDef(name = "pg_enum", typeClass = PostgreSQLEnumType.class) public abstract class Post<Text extends PostText<?>> extends PanacheEntityBase { private static final Logger log = Logger.getLogger(Post.class); + public enum Scope { + top_level, + comment + } + @Id @SequenceGenerator( allocationSize = 1, @@ -71,6 +82,11 @@ public abstract class Post<Text extends PostText<?>> extends PanacheEntityBase { @CheckForNull public OffsetDateTime date; + @Column(nullable = false) + @Enumerated(EnumType.STRING) + @Type(type = "pg_enum") + public Scope scope = Scope.top_level; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "newsletter", referencedColumnName = "id", nullable = true) @CheckForNull @@ -204,6 +220,8 @@ public abstract class Post<Text extends PostText<?>> extends PanacheEntityBase { conditions.add(cb.or(localizedSearches)); } + conditions.add(cb.equal(post.get(Post_.scope), Scope.top_level)); + query.where(conditions.toArray(new Predicate[0])); return query; @@ -223,6 +241,10 @@ public abstract class Post<Text extends PostText<?>> extends PanacheEntityBase { return text.getDescriptionHtml(); } + public final boolean isTopLevel() { + return scope == Scope.top_level; + } + public static class PostPage<T extends Post<? extends PostText>> { public @CheckForNull final Integer prevCursor; public @CheckForNull final Integer cursor; diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java index 59cacee..7ecfcba 100644 --- a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java +++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java @@ -310,6 +310,7 @@ public abstract class PostResource { feed.setEntries( posts.stream() + .filter(Post::isTopLevel) .map( post -> { var entry = new Entry(); diff --git a/src/main/resources/db/changeLog-1.8.xml b/src/main/resources/db/changeLog-1.8.xml new file mode 100644 index 0000000..2359001 --- /dev/null +++ b/src/main/resources/db/changeLog-1.8.xml @@ -0,0 +1,58 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.liquibase.org/xml/ns/dbchangelog + http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.10.xsd"> + + <changeSet author="mulk" id="1.8-1"> + <sql> + CREATE TYPE benki.post_scope AS ENUM ('top_level', 'comment'); + </sql> + </changeSet> + + <changeSet author="mulk" id="1.8-2"> + <addColumn tableName="bookmarks" schemaName="benki"> + <column name="scope" type="benki.post_scope" defaultValue="top_level"> + <constraints nullable="false"/> + </column> + </addColumn> + + <addColumn tableName="lazychat_messages" schemaName="benki"> + <column name="scope" type="benki.post_scope" defaultValue="top_level"> + <constraints nullable="false"/> + </column> + </addColumn> + + <addColumn tableName="posts" schemaName="benki"> + <column name="scope" type="benki.post_scope" defaultValue="top_level"> + <constraints nullable="false"/> + </column> + </addColumn> + + <createIndex tableName="posts" + schemaName="benki" + indexName="post_scope_id_idx"> + <column name="scope"/> + <column name="id"/> + </createIndex> + </changeSet> + + <changeSet id="1.8-3" author="mulk"> + <createIndex tableName="bookmarks" + schemaName="benki" + indexName="bookmarks_scope_id_idx"> + <column name="scope"/> + <column name="id"/> + </createIndex> + + <createIndex tableName="lazychat_messages" + schemaName="benki" + indexName="lazychat_messages_scope_id_idx"> + <column name="scope"/> + <column name="id"/> + </createIndex> + </changeSet> + +</databaseChangeLog> diff --git a/src/main/resources/db/changeLog.xml b/src/main/resources/db/changeLog.xml index 7b4b700..88937a3 100644 --- a/src/main/resources/db/changeLog.xml +++ b/src/main/resources/db/changeLog.xml @@ -14,5 +14,6 @@ <include file="db/changeLog-1.5.xml"/> <include file="db/changeLog-1.6.xml"/> <include file="db/changeLog-1.7.xml"/> + <include file="db/changeLog-1.8.xml"/> </databaseChangeLog> |