Replace UserVisible{Bookmark,Post,LazychatMessage} with a @ManyToMany.

Change-Id: Ie807f3eed9da1e5bcaefb10104d989f3b3ddbf7b
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/bookmarx/UserVisibleBookmark.java b/src/main/java/eu/mulk/mulkcms2/benki/bookmarx/UserVisibleBookmark.java
deleted file mode 100644
index 589e62a..0000000
--- a/src/main/java/eu/mulk/mulkcms2/benki/bookmarx/UserVisibleBookmark.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package eu.mulk.mulkcms2.benki.bookmarx;
-
-import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
-import java.io.Serializable;
-import java.util.Objects;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import org.hibernate.annotations.Immutable;
-
-@Entity
-@Immutable
-@Table(name = "user_visible_bookmarks", schema = "public", catalog = "benki")
-public class UserVisibleBookmark extends PanacheEntityBase implements Serializable {
-
-  @Id
-  @Column(name = "user", nullable = true)
-  public Integer userId;
-
-  @Id
-  @Column(name = "message", nullable = true)
-  public Integer messageId;
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (!(o instanceof UserVisibleBookmark)) {
-      return false;
-    }
-    UserVisibleBookmark that = (UserVisibleBookmark) o;
-    return Objects.equals(userId, that.userId) && Objects.equals(messageId, that.messageId);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(userId, messageId);
-  }
-}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/generic/Post.java b/src/main/java/eu/mulk/mulkcms2/benki/generic/Post.java
index 050cdcb..bfa02d2 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/generic/Post.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/generic/Post.java
@@ -3,12 +3,16 @@
 import eu.mulk.mulkcms2.benki.users.User;
 import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
 import java.time.OffsetDateTime;
+import java.util.Set;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
@@ -27,4 +31,11 @@
   @ManyToOne
   @JoinColumn(name = "owner", referencedColumnName = "id")
   public User owner;
+
+  @ManyToMany(fetch = FetchType.LAZY)
+  @JoinTable(
+      name = "user_visible_posts",
+      joinColumns = @JoinColumn(name = "message"),
+      inverseJoinColumns = @JoinColumn(name = "user"))
+  public Set<User> visibleTo;
 }
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/generic/UserVisiblePost.java b/src/main/java/eu/mulk/mulkcms2/benki/generic/UserVisiblePost.java
deleted file mode 100644
index 2b09120..0000000
--- a/src/main/java/eu/mulk/mulkcms2/benki/generic/UserVisiblePost.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package eu.mulk.mulkcms2.benki.generic;
-
-import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
-import java.io.Serializable;
-import java.util.Objects;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import org.hibernate.annotations.Immutable;
-
-@Entity
-@Immutable
-@Table(name = "user_visible_posts", schema = "public", catalog = "benki")
-public class UserVisiblePost extends PanacheEntityBase implements Serializable {
-
-  @Id
-  @Column(name = "user", nullable = true)
-  public Integer userId;
-
-  @Id
-  @Column(name = "message", nullable = true)
-  public Integer messageId;
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (!(o instanceof UserVisiblePost)) {
-      return false;
-    }
-    UserVisiblePost that = (UserVisiblePost) o;
-    return Objects.equals(userId, that.userId) && Objects.equals(messageId, that.messageId);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(userId, messageId);
-  }
-}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/lafargue/UserVisibleLazychatMessage.java b/src/main/java/eu/mulk/mulkcms2/benki/lafargue/UserVisibleLazychatMessage.java
deleted file mode 100644
index 0570aae..0000000
--- a/src/main/java/eu/mulk/mulkcms2/benki/lafargue/UserVisibleLazychatMessage.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package eu.mulk.mulkcms2.benki.lafargue;
-
-import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
-import java.io.Serializable;
-import java.util.Objects;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import org.hibernate.annotations.Immutable;
-
-@Entity
-@Immutable
-@Table(name = "user_visible_lazychat_messages", schema = "public", catalog = "benki")
-public class UserVisibleLazychatMessage extends PanacheEntityBase implements Serializable {
-
-  @Id
-  @Column(name = "user", nullable = true)
-  public Integer userId;
-
-  @Id
-  @Column(name = "message", nullable = true)
-  public Integer messageId;
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (!(o instanceof UserVisibleLazychatMessage)) {
-      return false;
-    }
-    UserVisibleLazychatMessage that = (UserVisibleLazychatMessage) o;
-    return Objects.equals(userId, that.userId) && Objects.equals(messageId, that.messageId);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(userId, messageId);
-  }
-}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/User.java b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
index fb1ed3b..11c01fb 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
@@ -12,6 +12,7 @@
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.ManyToMany;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@@ -84,4 +85,7 @@
 
   @OneToMany(mappedBy = "author")
   public Collection<WikiPageRevision> wikiPageRevisions;
+
+  @ManyToMany(mappedBy = "visibleTo")
+  public Collection<Post> visiblePosts;
 }