Filter outlook discussions with retained outlooks

This commit is contained in:
2026-06-12 12:58:28 +00:00
parent 82dd304f10
commit fa1b2cb390
2 changed files with 106 additions and 2 deletions

View File

@@ -85,6 +85,7 @@ func (s *Service) LatestConvectiveOutlook(ctx context.Context, filter OutlookFil
}
}
out.Outlooks = outlooks
out.Discussions = filterOutlookDiscussions(out.Discussions, out.Outlooks)
return out, nil
}
@@ -123,6 +124,12 @@ func cloneOutlookRun(run *model.WeatherOutlookRun) *model.WeatherOutlookRun {
out.Outlooks[i] = cloneOutlook(run.Outlooks[i])
}
}
if run.Discussions != nil {
out.Discussions = make([]model.WeatherOutlookDiscussion, len(run.Discussions))
for i := range run.Discussions {
out.Discussions[i] = cloneOutlookDiscussion(run.Discussions[i])
}
}
return &out
}
@@ -135,6 +142,31 @@ func cloneOutlook(outlook model.WeatherOutlook) model.WeatherOutlook {
return out
}
func cloneOutlookDiscussion(discussion model.WeatherOutlookDiscussion) model.WeatherOutlookDiscussion {
out := discussion
out.UpdatedAt = copyTime(discussion.UpdatedAt)
return out
}
func filterOutlookDiscussions(discussions []model.WeatherOutlookDiscussion, outlooks []model.WeatherOutlook) []model.WeatherOutlookDiscussion {
if len(outlooks) == 0 {
return []model.WeatherOutlookDiscussion{}
}
retainedDays := make(map[int]struct{}, len(outlooks))
for _, outlook := range outlooks {
retainedDays[outlook.Day] = struct{}{}
}
out := discussions[:0]
for _, discussion := range discussions {
if _, ok := retainedDays[discussion.Day]; ok {
out = append(out, discussion)
}
}
return out
}
func copyFloat64(value *float64) *float64 {
if value == nil {
return nil