diff options
| author | Priyansh <[email protected]> | 2025-08-19 13:19:30 +0530 |
|---|---|---|
| committer | Priyansh <[email protected]> | 2025-08-19 13:19:30 +0530 |
| commit | 9fbf28c2f77ec74c75a5274cbda897217ceaf571 (patch) | |
| tree | 87dab6adda634a08b3b1cf74c0dd1e616113aa30 /controllers | |
| parent | 6a65e3927506b0e46f18c9c1b41e952418bfd78e (diff) | |
| download | metachan-9fbf28c2f77ec74c75a5274cbda897217ceaf571.tar.xz metachan-9fbf28c2f77ec74c75a5274cbda897217ceaf571.zip | |
episodes router; anilist support; general fixes
Diffstat (limited to 'controllers')
| -rw-r--r-- | controllers/anime.go | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/controllers/anime.go b/controllers/anime.go index 7c01768..baaf6f9 100644 --- a/controllers/anime.go +++ b/controllers/anime.go @@ -2,6 +2,7 @@ package controllers import ( "metachan/database" + "metachan/entities" animeService "metachan/services/anime" "metachan/utils/logger" "metachan/utils/mappers" @@ -22,18 +23,9 @@ func getAnimeService() *animeService.Service { // GetAnimeByMALID fetches anime details by MAL ID func GetAnimeByMALID(c *fiber.Ctx) error { - malID := c.Params("mal_id") - if malID == "" { - return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ - "error": "Query parameter MAL ID is required", - }) - } - - mapping, err := database.GetAnimeMappingViaMALID(mappers.ForceInt(malID)) + mapping, err := getAnimeMapping(c) if err != nil { - return c.Status(fiber.StatusNotFound).JSON(fiber.Map{ - "error": "Anime not found", - }) + return err } service := getAnimeService() @@ -50,3 +42,50 @@ func GetAnimeByMALID(c *fiber.Ctx) error { return c.JSON(anime) } + +// GetAnimeEpisodesByMALID fetches anime episodes by MAL ID +func GetAnimeEpisodesByMALID(c *fiber.Ctx) error { + mapping, err := getAnimeMapping(c) + if err != nil { + return err + } + + service := getAnimeService() + anime, err := service.GetAnimeDetails(mapping) + if err != nil { + logger.Log("Failed to fetch anime episodes: "+err.Error(), logger.LogOptions{ + Level: logger.Error, + Prefix: "AnimeAPI", + }) + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": "Failed to fetch anime episodes", + }) + } + + // Return only the episodes data + return c.JSON(anime.Episodes) +} + +func getAnimeMapping(c *fiber.Ctx) (*entities.AnimeMapping, error) { + isAnilist := c.Query("provider") == "anilist" + malID := c.Params("id") + if malID == "" { + return nil, c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "Query parameter MAL ID is required", + }) + } + + var mapping *entities.AnimeMapping + var err error + if isAnilist { + mapping, err = database.GetAnimeMappingViaAnilistID(mappers.ForceInt(malID)) + } else { + mapping, err = database.GetAnimeMappingViaMALID(mappers.ForceInt(malID)) + } + if err != nil { + return nil, c.Status(fiber.StatusNotFound).JSON(fiber.Map{ + "error": "Anime mapping not found", + }) + } + return mapping, nil +} |
