Centralize daypart key canonicalization

This commit is contained in:
2026-08-13 01:00:54 +00:00
parent daf0c7efd7
commit 13829cc65c
4 changed files with 46 additions and 40 deletions

View File

@@ -3,9 +3,7 @@ package generatedtext
import (
"fmt"
"sort"
"strings"
"time"
"unicode"
"gitea.maximumdirect.net/eric/weatherreporter/internal/briefing"
"gitea.maximumdirect.net/eric/weatherreporter/internal/facts"
@@ -698,7 +696,7 @@ func orderedDaypartRows(dayparts *map[string]briefing.DerivedDaypartSummaryModul
}
func daypartModuleKeyCandidates(daypart forecast.DaypartSummary) []string {
key := normalizedDaypartKey(daypart.Name)
key := forecast.CanonicalDaypartKey(daypart.Name)
if key == "" {
key = "unnamed"
}
@@ -708,24 +706,6 @@ func daypartModuleKeyCandidates(daypart forecast.DaypartSummary) []string {
return []string{key, daypart.Period.Start.Format(timeutil.DateLayout) + "_" + key}
}
func normalizedDaypartKey(value string) string {
lower := strings.ToLower(strings.TrimSpace(value))
var out strings.Builder
lastUnderscore := false
for _, r := range lower {
if unicode.IsLetter(r) || unicode.IsDigit(r) {
out.WriteRune(r)
lastUnderscore = false
continue
}
if !lastUnderscore {
out.WriteByte('_')
lastUnderscore = true
}
}
return strings.Trim(out.String(), "_")
}
func locationName(metadata briefing.Metadata) string {
if metadata.Location != nil {
if metadata.Location.Name != "" && metadata.Location.Region != "" {