mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-10-29 00:55:32 +00:00
86 lines
1.7 KiB
Go
86 lines
1.7 KiB
Go
package providers
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
)
|
|
|
|
type IssueProvider struct {
|
|
XMLProvider[Issues]
|
|
}
|
|
|
|
type Issues struct {
|
|
XMLName xml.Name `xml:"stuecke"`
|
|
Issues []Issue `xml:"stueck"`
|
|
}
|
|
|
|
func (i *IssueProvider) GetYear(year string) YearViewModel {
|
|
res := YearViewModel{Year: year}
|
|
last := ""
|
|
for _, issue := range i.Items.Issues {
|
|
if len(issue.Datum.When) < 4 {
|
|
continue
|
|
}
|
|
|
|
date := issue.Datum.When[0:4]
|
|
if date != last {
|
|
res.PushAvailable(date)
|
|
last = date
|
|
}
|
|
|
|
if date == year {
|
|
res.PushIssue(issue)
|
|
}
|
|
}
|
|
|
|
res.SortAvailableYears()
|
|
|
|
return res
|
|
}
|
|
|
|
type Issue struct {
|
|
XMLName xml.Name `xml:"stueck"`
|
|
Number IssueNumber `xml:"nummer"`
|
|
Datum KGPZDate `xml:"datum"`
|
|
Von string `xml:"von"`
|
|
Bis string `xml:"bis"`
|
|
Additionals []Additional `xml:"beilage"`
|
|
Identifier
|
|
AnnotationNote
|
|
}
|
|
|
|
type IssueNumber struct {
|
|
XMLName xml.Name `xml:"nummer"`
|
|
Value
|
|
Corrected string `xml:"korrigiert,attr"`
|
|
}
|
|
|
|
type Additional struct {
|
|
XMLName xml.Name `xml:"beilage"`
|
|
Nummer string `xml:"nummer,attr"`
|
|
Von string `xml:"von"`
|
|
Bis string `xml:"bis"`
|
|
}
|
|
|
|
func (i Issues) Append(data Issues) Issues {
|
|
i.Issues = append(i.Issues, data.Issues...)
|
|
return i
|
|
}
|
|
|
|
func (i Issues) String() string {
|
|
var res []string
|
|
for _, issue := range i.Issues {
|
|
res = append(res, issue.String())
|
|
}
|
|
|
|
return fmt.Sprintf("Issues: %v", res)
|
|
}
|
|
|
|
func (i *Issue) String() string {
|
|
return fmt.Sprintf("ID: %s\nNumber: %v\nDatum: %v\nVon: %s\nBis: %s\nAdditionals: %v\n", i.ID, i.Number, i.Datum, i.Von, i.Bis, i.Additionals)
|
|
}
|
|
|
|
func NewIssueProvider(paths []string) *IssueProvider {
|
|
return &IssueProvider{XMLProvider: XMLProvider[Issues]{paths: paths}}
|
|
}
|