diff options
| author | Bobby <[email protected]> | 2026-02-03 14:50:13 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-02-03 14:50:13 +0530 |
| commit | e4d65624c49c11db7da46d05f5e4caeec79bd955 (patch) | |
| tree | 57d7e68bffa0592129d1a75af9f05896bb6f926d /controllers | |
| parent | ed36e0308c7cd3a6197c899cb16bfe65cc5194b4 (diff) | |
| download | metachan-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.go | 46 |
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, + }) +} |
