From 058aedd5e01496e78380117ec731ea41b1728505 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Wed, 15 Apr 2026 00:35:57 +0200 Subject: [PATCH] fix: limit quick search to five results --- internal/features/anime/handler.go | 5 +---- internal/features/anime/service.go | 4 ++++ internal/jikan/search.go | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/internal/features/anime/handler.go b/internal/features/anime/handler.go index 58321dd..cbc6c7a 100644 --- a/internal/features/anime/handler.go +++ b/internal/features/anime/handler.go @@ -213,7 +213,7 @@ func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) { return } - res, err := h.svc.Search(r.Context(), query, 1) + res, err := h.svc.QuickSearch(r.Context(), query, 1, 5) if err != nil { log.Printf("quick search error: %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -221,9 +221,6 @@ func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) { } results := res.Animes - if len(results) > 5 { - results = results[:5] - } output := make([]quickSearchResult, len(results)) for i, anime := range results { diff --git a/internal/features/anime/service.go b/internal/features/anime/service.go index 059775e..7e21180 100644 --- a/internal/features/anime/service.go +++ b/internal/features/anime/service.go @@ -25,6 +25,10 @@ func (s *Service) Search(ctx context.Context, query string, page int) (jikan.Sea return s.jikanClient.Search(ctx, query, page) } +func (s *Service) QuickSearch(ctx context.Context, query string, page int, limit int) (jikan.SearchResult, error) { + return s.jikanClient.SearchWithLimit(ctx, query, page, limit) +} + func (s *Service) GetTopAnime(ctx context.Context, page int) (jikan.TopAnimeResult, error) { return s.jikanClient.GetTopAnime(ctx, page) } diff --git a/internal/jikan/search.go b/internal/jikan/search.go index 2a280e6..7c68137 100644 --- a/internal/jikan/search.go +++ b/internal/jikan/search.go @@ -7,14 +7,25 @@ import ( ) func (c *Client) Search(ctx context.Context, query string, page int) (SearchResult, error) { + return c.search(ctx, query, page, 0) +} + +func (c *Client) SearchWithLimit(ctx context.Context, query string, page int, limit int) (SearchResult, error) { + return c.search(ctx, query, page, limit) +} + +func (c *Client) search(ctx context.Context, query string, page int, limit int) (SearchResult, error) { if query == "" { return SearchResult{}, nil } if page < 1 { page = 1 } + if limit < 0 { + limit = 0 + } - cacheKey := fmt.Sprintf("search:%s:%d", query, page) + cacheKey := fmt.Sprintf("search:%s:%d:%d", query, page, limit) var cached SearchResult if c.getCache(ctx, cacheKey, &cached) { return cached, nil @@ -25,6 +36,9 @@ func (c *Client) Search(ctx context.Context, query string, page int) (SearchResu var result SearchResponse reqURL := fmt.Sprintf("%s/anime?q=%s&page=%d", c.baseURL, url.QueryEscape(query), page) + if limit > 0 { + reqURL = fmt.Sprintf("%s&limit=%d", reqURL, limit) + } if err := c.fetchWithRetry(ctx, reqURL, &result); err != nil { if hasStale {