aboutsummaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-03 14:50:13 +0530
committerBobby <[email protected]>2026-02-03 14:50:13 +0530
commite4d65624c49c11db7da46d05f5e4caeec79bd955 (patch)
tree57d7e68bffa0592129d1a75af9f05896bb6f926d /controllers
parented36e0308c7cd3a6197c899cb16bfe65cc5194b4 (diff)
downloadmetachan-e4d65624c49c11db7da46d05f5e4caeec79bd955.tar.xz
metachan-e4d65624c49c11db7da46d05f5e4caeec79bd955.zip
Add genre-based anime retrieval with pagination and related database updates
Diffstat (limited to 'controllers')
-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,
+ })
+}