api: pass request context to jikan

This commit is contained in:
2026-04-10 17:26:28 +02:00
parent ecb15782c8
commit 2b8332a16d
9 changed files with 134 additions and 112 deletions

View File

@@ -1,12 +1,13 @@
package jikan
import (
"context"
"fmt"
"net/url"
"time"
)
func (c *Client) Search(query string, page int) (SearchResult, error) {
func (c *Client) Search(ctx context.Context, query string, page int) (SearchResult, error) {
if query == "" {
return SearchResult{}, nil
}
@@ -16,14 +17,14 @@ func (c *Client) Search(query string, page int) (SearchResult, error) {
cacheKey := fmt.Sprintf("search:limit24:%s:%d", query, page)
var cached SearchResult
if c.getCache(cacheKey, &cached) {
if c.getCache(ctx, cacheKey, &cached) {
return cached, nil
}
var result SearchResponse
reqURL := fmt.Sprintf("%s/anime?q=%s&limit=24&page=%d", c.baseURL, url.QueryEscape(query), page)
if err := c.fetchWithRetry(reqURL, &result); err != nil {
if err := c.fetchWithRetry(ctx, reqURL, &result); err != nil {
return SearchResult{}, err
}
@@ -32,24 +33,24 @@ func (c *Client) Search(query string, page int) (SearchResult, error) {
HasNextPage: result.Pagination.HasNextPage,
}
c.setCache(cacheKey, res, time.Hour*1)
c.setCache(ctx, cacheKey, res, time.Hour*1)
return res, nil
}
func (c *Client) GetTopAnime(page int) (TopAnimeResult, error) {
func (c *Client) GetTopAnime(ctx context.Context, page int) (TopAnimeResult, error) {
if page < 1 {
page = 1
}
cacheKey := fmt.Sprintf("top:limit24:%d", page)
var cached TopAnimeResult
if c.getCache(cacheKey, &cached) {
if c.getCache(ctx, cacheKey, &cached) {
return cached, nil
}
var result TopAnimeResponse
reqURL := fmt.Sprintf("%s/top/anime?filter=bypopularity&limit=24&page=%d", c.baseURL, page)
if err := c.fetchWithRetry(reqURL, &result); err != nil {
if err := c.fetchWithRetry(ctx, reqURL, &result); err != nil {
return TopAnimeResult{}, err
}
@@ -58,6 +59,6 @@ func (c *Client) GetTopAnime(page int) (TopAnimeResult, error) {
HasNextPage: result.Pagination.HasNextPage,
}
c.setCache(cacheKey, res, time.Hour*1)
c.setCache(ctx, cacheKey, res, time.Hour*1)
return res, nil
}