Files
weatherreporter/internal/report/daily_report.go

69 lines
1.9 KiB
Go

package report
import (
"fmt"
"gitea.maximumdirect.net/eric/weatherreporter/internal/module"
"gitea.maximumdirect.net/eric/weatherreporter/internal/timeutil"
)
func dailyDefinition() Definition {
return Definition{
ID: Daily,
Name: "Daily Report",
PromptID: "weather.daily_generated_text",
GenerationMode: GenerationModeGeneratedTextTemplate,
TemplateID: "daily",
GeneratedTextSchemaID: "daily",
ComparisonStrategy: CompareSameValidDate,
ArtifactGroup: "daily",
BatchOutputName: "daily.md",
DistributorPathTemplates: []string{
"daily/{valid_start_date}/{run_id}.md",
"daily/{valid_start_date}/index.md",
},
Generated: true,
CompatiblePriorIDs: []ID{Daily},
Modules: dailyModules(),
resolve: resolveDaily,
runIDDisambiguator: validStartDateRunIDDisambiguator,
}
}
func dailyModules() []module.ConfigItem {
return moduleItems(
module.Metadata,
module.CurrentConditions,
module.NarrativeForecast,
module.DerivedDailySummary,
module.DerivedDaypartSummaries,
module.PrecipTiming,
module.AlertDigest,
module.SPCConvectiveOutlooks,
module.AreaForecastDiscussion,
module.SPCConvectiveDiscussion,
module.WeatherStory,
module.OutdoorWindows,
module.DailyPlanning,
module.HourlyForecast,
)
}
func resolveDaily(req ResolveRequest) (timeutil.Period, error) {
if req.Date.IsZero() {
return timeutil.Period{}, fmt.Errorf("daily report requires an explicit date")
}
return timeutil.CivilDay(req.Date, req.Location), nil
}
func validStartDateRunIDDisambiguator(resolved Resolved) string {
if resolved.ValidPeriod.Start.IsZero() {
return ""
}
location, err := timeutil.LoadLocation(resolved.Timezone)
if err != nil {
return resolved.ValidPeriod.Start.Format(timeutil.DateLayout)
}
return resolved.ValidPeriod.Start.In(location).Format(timeutil.DateLayout)
}