fix: resolve infinite scroll duplication issues

This commit is contained in:
2026-04-07 14:13:13 +02:00
parent f77788588e
commit 8bb5bc0a18
7 changed files with 267 additions and 183 deletions

View File

@@ -7,10 +7,23 @@ import (
"strconv"
"mal/internal/database"
"mal/internal/jikan"
"mal/internal/shared/middleware"
"mal/internal/templates"
)
func deduplicateAnimes(animes []jikan.Anime) []jikan.Anime {
seen := make(map[int]bool)
var result []jikan.Anime
for _, a := range animes {
if !seen[a.MalID] {
seen[a.MalID] = true
result = append(result, a)
}
}
return result
}
type Handler struct {
svc *Service
}
@@ -65,6 +78,8 @@ func (h *Handler) HandleAPISearch(w http.ResponseWriter, r *http.Request) {
return
}
res.Animes = deduplicateAnimes(res.Animes)
templates.SearchItems(query, res.Animes, page+1, res.HasNextPage).Render(r.Context(), w)
}
@@ -82,6 +97,8 @@ func (h *Handler) HandleAPICatalog(w http.ResponseWriter, r *http.Request) {
return
}
res.Animes = deduplicateAnimes(res.Animes)
templates.CatalogItems(res.Animes, page+1, res.HasNextPage).Render(r.Context(), w)
}
@@ -191,6 +208,8 @@ func (h *Handler) HandleAPIDiscoverAiring(w http.ResponseWriter, r *http.Request
return
}
res.Animes = deduplicateAnimes(res.Animes)
templates.DiscoverItems(res.Animes, "airing", page+1, res.HasNextPage).Render(r.Context(), w)
}
@@ -208,5 +227,7 @@ func (h *Handler) HandleAPIDiscoverUpcoming(w http.ResponseWriter, r *http.Reque
return
}
res.Animes = deduplicateAnimes(res.Animes)
templates.DiscoverItems(res.Animes, "upcoming", page+1, res.HasNextPage).Render(r.Context(), w)
}