Added new, focused forecast discussion endpoints for key messages, short term, and long term discussions
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful

This commit is contained in:
2026-03-29 08:05:16 -05:00
parent 0bccfc50d9
commit 6ea27cb2c5
9 changed files with 607 additions and 11 deletions

View File

@@ -8,6 +8,33 @@ import (
"gitea.maximumdirect.net/ejr/weatherfeeder/model"
)
type DiscussionKeyMessagesPayload struct {
OfficeID string `json:"officeId,omitempty" xml:"officeId,omitempty"`
OfficeName string `json:"officeName,omitempty" xml:"officeName,omitempty"`
Product model.ForecastDiscussionProduct `json:"product" xml:"product"`
IssuedAt time.Time `json:"issuedAt" xml:"issuedAt"`
UpdatedAt *time.Time `json:"updatedAt,omitempty" xml:"updatedAt,omitempty"`
KeyMessages []string `json:"keyMessages" xml:"keyMessages"`
}
type DiscussionShortTermPayload struct {
OfficeID string `json:"officeId,omitempty" xml:"officeId,omitempty"`
OfficeName string `json:"officeName,omitempty" xml:"officeName,omitempty"`
Product model.ForecastDiscussionProduct `json:"product" xml:"product"`
IssuedAt time.Time `json:"issuedAt" xml:"issuedAt"`
UpdatedAt *time.Time `json:"updatedAt,omitempty" xml:"updatedAt,omitempty"`
ShortTerm *model.WeatherForecastDiscussionSection `json:"shortTerm,omitempty" xml:"shortTerm,omitempty"`
}
type DiscussionLongTermPayload struct {
OfficeID string `json:"officeId,omitempty" xml:"officeId,omitempty"`
OfficeName string `json:"officeName,omitempty" xml:"officeName,omitempty"`
Product model.ForecastDiscussionProduct `json:"product" xml:"product"`
IssuedAt time.Time `json:"issuedAt" xml:"issuedAt"`
UpdatedAt *time.Time `json:"updatedAt,omitempty" xml:"updatedAt,omitempty"`
LongTerm *model.WeatherForecastDiscussionSection `json:"longTerm,omitempty" xml:"longTerm,omitempty"`
}
func DiscussionPayload(run *model.WeatherForecastDiscussion, _ Units, tz *time.Location) any {
if run == nil {
return nil
@@ -26,6 +53,51 @@ func DiscussionPayload(run *model.WeatherForecastDiscussion, _ Units, tz *time.L
return &out
}
func DiscussionKeyMessagesOnlyPayload(run *model.WeatherForecastDiscussion, _ Units, tz *time.Location) any {
if run == nil {
return nil
}
return DiscussionKeyMessagesPayload{
OfficeID: run.OfficeID,
OfficeName: run.OfficeName,
Product: run.Product,
IssuedAt: inLocationTime(run.IssuedAt, tz),
UpdatedAt: inLocationTimePtr(run.UpdatedAt, tz),
KeyMessages: append([]string{}, run.KeyMessages...),
}
}
func DiscussionShortTermOnlyPayload(run *model.WeatherForecastDiscussion, _ Units, tz *time.Location) any {
if run == nil {
return nil
}
return DiscussionShortTermPayload{
OfficeID: run.OfficeID,
OfficeName: run.OfficeName,
Product: run.Product,
IssuedAt: inLocationTime(run.IssuedAt, tz),
UpdatedAt: inLocationTimePtr(run.UpdatedAt, tz),
ShortTerm: copyDiscussionSection(run.ShortTerm, tz),
}
}
func DiscussionLongTermOnlyPayload(run *model.WeatherForecastDiscussion, _ Units, tz *time.Location) any {
if run == nil {
return nil
}
return DiscussionLongTermPayload{
OfficeID: run.OfficeID,
OfficeName: run.OfficeName,
Product: run.Product,
IssuedAt: inLocationTime(run.IssuedAt, tz),
UpdatedAt: inLocationTimePtr(run.UpdatedAt, tz),
LongTerm: copyDiscussionSection(run.LongTerm, tz),
}
}
func copyDiscussionSection(in *model.WeatherForecastDiscussionSection, tz *time.Location) *model.WeatherForecastDiscussionSection {
if in == nil {
return nil