From 67c6067083d491f7e239fe0d73a6ed16c637fb3b Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sat, 30 Jan 2021 14:43:39 +0100 Subject: 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 --- .../java/eu/mulk/mulkcms2/benki/posts/Post.java | 22 ++++++++++++++++++++++ .../eu/mulk/mulkcms2/benki/posts/PostResource.java | 1 + 2 files changed, 23 insertions(+) (limited to 'src/main/java/eu') 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> 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> 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> 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> extends PanacheEntityBase { return text.getDescriptionHtml(); } + public final boolean isTopLevel() { + return scope == Scope.top_level; + } + public static class PostPage> { 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(); -- cgit v1.2.3