mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 01:55:29 +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
 | |
| }
 | 
