aboutsummaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
authorPriyansh <[email protected]>2025-08-19 13:19:30 +0530
committerPriyansh <[email protected]>2025-08-19 13:19:30 +0530
commit9fbf28c2f77ec74c75a5274cbda897217ceaf571 (patch)
tree87dab6adda634a08b3b1cf74c0dd1e616113aa30 /controllers
parent6a65e3927506b0e46f18c9c1b41e952418bfd78e (diff)
downloadmetachan-9fbf28c2f77ec74c75a5274cbda897217ceaf571.tar.xz
metachan-9fbf28c2f77ec74c75a5274cbda897217ceaf571.zip
episodes router; anilist support; general fixes
Diffstat (limited to 'controllers')
-rw-r--r--controllers/anime.go61
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
+}