diff --git a/internal/anime/handler/handler.go b/internal/anime/handler/handler.go index aab8ccc..29212d9 100644 --- a/internal/anime/handler/handler.go +++ b/internal/anime/handler/handler.go @@ -413,3 +413,44 @@ func (h *AnimeHandler) HandleRandomAnime(c *gin.Context) { "in_watchlist": inWatchlist, }) } + +func (h *AnimeHandler) HandleAnimeReviews(c *gin.Context) { + id, _ := strconv.Atoi(c.Param("id")) + if id <= 0 { + c.Status(http.StatusNotFound) + return + } + + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + if page < 1 { + page = 1 + } + + reviews, hasNextPage, err := h.svc.GetReviews(c.Request.Context(), id, page) + if err != nil { + c.Status(http.StatusInternalServerError) + return + } + + user, _ := c.Get("User") + + if c.GetHeader("HX-Request") == "true" && page > 1 { + c.HTML(http.StatusOK, "reviews.gohtml", gin.H{ + "_fragment": "review_cards", + "Reviews": reviews, + "NextPage": page + 1, + "HasNextPage": hasNextPage, + "AnimeID": id, + }) + return + } + + c.HTML(http.StatusOK, "reviews.gohtml", gin.H{ + "CurrentPath": fmt.Sprintf("/anime/%d/reviews", id), + "Reviews": reviews, + "NextPage": page + 1, + "HasNextPage": hasNextPage, + "AnimeID": id, + "User": user, + }) +} diff --git a/templates/anime/reviews.gohtml b/templates/anime/reviews.gohtml new file mode 100644 index 0000000..0c878cd --- /dev/null +++ b/templates/anime/reviews.gohtml @@ -0,0 +1,115 @@ +{{define "title"}}Reviews{{end}} +{{define "content"}} +{{template "reviews_content" .}} +{{end}} + +{{define "reviews_content"}} +
No reviews yet
+