70 lines
1.2 KiB
Go

package halloffame
import (
"sort"
"time"
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/arn"
"github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/utils"
)
const minYear = 1963
// Get ...
func Get(ctx aero.Context) error {
user := utils.GetUser(ctx)
maxYear := time.Now().Year() - 1
hallOfFameEntries := []*utils.HallOfFameEntry{}
animes := arn.FilterAnime(func(anime *arn.Anime) bool {
if len(anime.StartDate) < 4 {
return false
}
year := anime.StartDateTime().Year()
if year > maxYear || year < minYear {
return false
}
if anime.Status != "finished" {
return false
}
if anime.Type != "tv" {
return false
}
return true
})
arn.SortAnimeByQuality(animes)
yearsAdded := map[int]bool{}
for _, anime := range animes {
year := anime.StartDateTime().Year()
_, exists := yearsAdded[year]
if exists {
continue
}
hallOfFameEntries = append(hallOfFameEntries, &utils.HallOfFameEntry{
Year: year,
Anime: anime,
})
yearsAdded[year] = true
}
sort.Slice(hallOfFameEntries, func(i, j int) bool {
return hallOfFameEntries[i].Year > hallOfFameEntries[j].Year
})
return ctx.HTML(components.HallOfFame(hallOfFameEntries, user))
}