mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-10-28 16:45:32 +00:00
57 lines
1.1 KiB
Go
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
|
|
}
|