Files
kgpz_web/viewmodels/year_view.go
2025-01-01 17:00:26 +01:00

57 lines
1.1 KiB
Go

package viewmodels
import (
"fmt"
"maps"
"slices"
"sort"
"github.com/Theodor-Springmann-Stiftung/kgpz_web/functions"
"github.com/Theodor-Springmann-Stiftung/kgpz_web/xmlmodels"
)
type IssuesByMonth map[int][]xmlmodels.Issue
func (ibm *IssuesByMonth) Sort() {
for _, issues := range *ibm {
sort.Slice(issues, func(i, j int) bool {
return issues[i].Number.No < issues[j].Number.No
})
}
}
type YearVM struct {
Year int
AvailableYears []int
Issues IssuesByMonth
}
func YearView(year int, lib *xmlmodels.Library) (*YearVM, error) {
issues := make(IssuesByMonth, 12)
years := make(map[int]bool)
lib.Issues.Lock()
for _, issue := range lib.Issues.Array {
y := issue.Datum.When.Year
years[y] = true
if y == year {
functions.MapArrayInsert(issues, issue.Datum.When.Month, issue)
}
}
lib.Issues.Unlock()
if len(issues) == 0 {
return nil, fmt.Errorf("No issues found for year %v", year)
}
availableyears := slices.Collect(maps.Keys(years))
slices.Sort(availableyears)
issues.Sort()
return &YearVM{
Year: year,
AvailableYears: availableyears,
Issues: issues,
}, nil
}