User-Kommentare über Dashboard ausblenden
Anforderungen
Wir brauchen für die Konferenz eine Möglichkeit, User-Kommentare zu Events im Think-Big-Modul moderieren zu können. Die einfachste Möglichkeit wäre, sie alle wie die Timeline-Einträge im Dashboard nach Datum geordnet (neueste oben) anzuzeigen mit einem Knopf zum löschen oder zumindest ausblenden daneben.
Vorgehen
Schritt 1: Alle Kommentare im Dashboard anzeigen
-
Neue Methode in
CommentRepository
anlegen:List<Comment> findAllByOrderByDateDesc()
-
Neue Methode in
CommentService
anlegen:public List<Comment> getAllComments()
-
Neue Methode in
TimelineDashboardController
:@GetMapping("/comments") public String showComments(Model model) { List<Comment> comments = commentService.getAllComments(); model.addAttribute("title", "Comments"); model.addAttribute("comments", comments); model.addAttribute("classActiveComments", "active"); return "comments"; }
-
Neues Thymeleaf-Template anlegen:
resources/templates/comments.html
Den Inhalt kannst du quasi 1:1 vonindex.html
übernehmen mit dem Unterschied, dass du nicht überentries
sondern übercomments
iterierst (bzw. den Namen den du beimodel.addAttribute("comments", comments)
im String übergeben hast) und die Felder andere sind.Die Feldernamen kannst du dir aus der Klasse
Comment
holen. Dabei müssen keine Getter verwendet werden, auch nicht, wenn du durch mehrere Objeke durchgehst. Wenn du z.B. eine Spalte mit dem Namen des Verfassers eines Kommentars (haben möchtest, sähe das so aus (c
sei hier der Name, den du in der For-Each-Schleife übercomments
für das einzelne Element vergeben hast):<td th:text="${c.user.name}">Author</td>
Den Button mit der Form kannst du erstmal bis auf die ID ignorieren. Wahrscheinlich musst du aber
tle.id
inc.id
ändern, damit die Seite dargestellt werden kann. -
Nav-Bar um Menüpunkt für die neue Ansicht erweitern: Hierzu musst du lediglich einen der vorhandenen Blöcke duplizieren und den richtigen Klassennamen aus der Controller-Methode sowie die korrekte Route aus dem
@GetMapping
eintragen (Tilde beachten).
Schritt 2: Kommentare löschen
-
In
resources/templates/comments.html
die Route inth:action
auf `@{~/comments}" ändern -
Neue POST-Methode in
TimelineDashboardController
anlegen:public String deleteComment(Long id)
Wie die aufgebaut sein muss kannst du dir am besten andeleteTimelineEntry(Long id)
anschauen, da siehst du auch, wie du die Umleitung nach dem erfolgten POST machen musst. -
Neue Methode in
CommentService
:public void deleteComment(Comment comment)
Damit bist du fast fertig, weil das Repository schon Methoden fürdelete(Comment comment)
und sogardeleteById(Long id)
hat.Das einzige Problem, das es jetzt noch zu lösen gilt ist, dass du keine Kommentare löschen kannst, die bereits geliket wurden. Dafür ist noch ein letzter Schritt nötig. Mit einem saubereren DB-Schema ginge das automatisch, aber was will man machen ... :)
Schritt 3: Kommentar-Likes löschen
- Neue Methode in
ThinkBigLikeService
anlegen:public void deleteAllCommentLikesForComment(Comment comment)
- Neue Methode in
CommentLikeRepository
anlegen:void deleteAllByComment(Comment comment)
- Die neue Methode im
ThinkBigLikeService
inCommentService.deleteComment(Comment comment)
aufrufen (dafür musst du wahrscheinlich noch denThinkBigLikeService
als Feld in der Klasse und im Konstruktor ergänzen.
Wenn du Fragen hast, schreib mir einfach. :)