From 8c5ddec4509997d760cea037bac3596394ff2cde Mon Sep 17 00:00:00 2001 From: Youssef Habri Date: Tue, 11 Feb 2020 12:43:50 +0100 Subject: [PATCH] Avoid calling `FilterSoundTracks` for every `Anime` as it can potentially be costly --- pages/soundtrack/soundtrack.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pages/soundtrack/soundtrack.go b/pages/soundtrack/soundtrack.go index 5d20c3ab..b3ac9e4f 100644 --- a/pages/soundtrack/soundtrack.go +++ b/pages/soundtrack/soundtrack.go @@ -19,16 +19,21 @@ func Get(ctx aero.Context) error { return ctx.Error(http.StatusNotFound, "Track not found", err) } - relatedTracks := make([]*arn.SoundTrack, 0, 5) - for _, anime := range track.Anime() { - anime := anime - tracks := arn.FilterSoundTracks(func(t *arn.SoundTrack) bool { - return !t.IsDraft && len(t.Media) > 0 && t.ID != track.ID && arn.Contains(t.Tags, "anime:"+anime.ID) - }) - relatedTracks = append(relatedTracks, tracks...) - } + relatedTracks := arn.FilterSoundTracks(func(t *arn.SoundTrack) bool { + return !t.IsDraft && len(t.Media) > 0 && t.ID != track.ID && isRelated(track.Anime(), t) + }) customCtx := ctx.(*middleware.OpenGraphContext) customCtx.OpenGraph = getOpenGraph(track) return ctx.HTML(components.SoundTrackPage(track, relatedTracks, user)) } + +func isRelated(anime []*arn.Anime, track *arn.SoundTrack) bool { + for _, anime := range anime { + if arn.Contains(track.Tags, "anime:"+anime.ID) { + return true + } + } + + return false +}