aboutsummaryrefslogtreecommitdiff
path: root/controllers/anime.go
diff options
context:
space:
mode:
Diffstat (limited to 'controllers/anime.go')
-rw-r--r--controllers/anime.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/controllers/anime.go b/controllers/anime.go
index c410939..2027d72 100644
--- a/controllers/anime.go
+++ b/controllers/anime.go
@@ -1,6 +1,7 @@
package controllers
import (
+ "fmt"
"metachan/database"
"metachan/entities"
animeService "metachan/services/anime"
@@ -179,3 +180,48 @@ func GetGenres(c *fiber.Ctx) error {
"genres": genres,
})
}
+
+// GetAnimeByGenre retrieves paginated anime list for a specific genre
+func GetAnimeByGenre(c *fiber.Ctx) error {
+ genreID := mappers.ForceInt(c.Params("id"))
+ page := mappers.ForceInt(c.Query("page", "1"))
+ limit := mappers.ForceInt(c.Query("limit", "12"))
+
+ if limit > 100 {
+ limit = 100
+ }
+ if limit < 1 {
+ limit = 12
+ }
+ if page < 1 {
+ page = 1
+ }
+
+ logger.Log(fmt.Sprintf("Fetching anime for genre %d, page %d, limit %d", genreID, page, limit), logger.LogOptions{
+ Level: logger.Debug,
+ Prefix: "GenreController",
+ })
+
+ service := getAnimeService()
+ animeList, pagination, err := service.GetAnimeByGenre(genreID, page, limit)
+ if err != nil {
+ logger.Log("Failed to fetch anime by genre: "+err.Error(), logger.LogOptions{
+ Level: logger.Error,
+ Prefix: "GenreController",
+ })
+ return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
+ "error": "Failed to retrieve anime for genre",
+ })
+ }
+
+ return c.JSON(fiber.Map{
+ "pagination": fiber.Map{
+ "current_page": pagination.CurrentPage,
+ "has_next_page": pagination.HasNextPage,
+ "last_visible_page": pagination.LastVisiblePage,
+ "total": pagination.Items.Total,
+ "per_page": pagination.Items.PerPage,
+ },
+ "data": animeList,
+ })
+}