aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-01-20 18:13:48 +0530
committerBobby <[email protected]>2026-01-20 18:13:48 +0530
commited36e0308c7cd3a6197c899cb16bfe65cc5194b4 (patch)
tree4c0edabf651fc9b28648760920982c938fdf3d19 /utils
parentdf6cf3edcbb560e7615ad13d8daf4843507eb11e (diff)
downloadmetachan-ed36e0308c7cd3a6197c899cb16bfe65cc5194b4.tar.xz
metachan-ed36e0308c7cd3a6197c899cb16bfe65cc5194b4.zip
Implement genre synchronization from MAL via Jikan API and add genre retrieval endpoint
Diffstat (limited to 'utils')
-rw-r--r--utils/api/jikan/jikan.go20
-rw-r--r--utils/api/jikan/types.go13
2 files changed, 33 insertions, 0 deletions
diff --git a/utils/api/jikan/jikan.go b/utils/api/jikan/jikan.go
index 3a7e796..1e45c74 100644
--- a/utils/api/jikan/jikan.go
+++ b/utils/api/jikan/jikan.go
@@ -260,3 +260,23 @@ func (c *JikanClient) GetAnimeCharacters(malID int) (*JikanAnimeCharacterRespons
return &characterResponse, nil
}
+
+// GetAnimeGenres fetches all anime genres from MAL
+func (c *JikanClient) GetAnimeGenres() (*JikanGenresResponse, error) {
+ apiURL := "https://api.jikan.moe/v4/genres/anime"
+
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+
+ bodyBytes, err := c.makeRequest(ctx, apiURL)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get anime genres: %w", err)
+ }
+
+ var genresResponse JikanGenresResponse
+ if err := json.Unmarshal(bodyBytes, &genresResponse); err != nil {
+ return nil, fmt.Errorf("failed to decode genres response: %w", err)
+ }
+
+ return &genresResponse, nil
+}
diff --git a/utils/api/jikan/types.go b/utils/api/jikan/types.go
index cbcb543..393be56 100644
--- a/utils/api/jikan/types.go
+++ b/utils/api/jikan/types.go
@@ -14,6 +14,19 @@ type JikanGenericMALStructure struct {
Name string `json:"name"`
}
+// JikanGenre represents a genre from Jikan genres API
+type JikanGenre struct {
+ MALID int `json:"mal_id"`
+ Name string `json:"name"`
+ URL string `json:"url"`
+ Count int `json:"count"`
+}
+
+// JikanGenresResponse represents the genres response from Jikan API
+type JikanGenresResponse struct {
+ Data []JikanGenre `json:"data"`
+}
+
// JikanAnimeResponse represents the main anime response from Jikan API
type JikanAnimeResponse struct {
Data struct {