Implemented the weather forecast discussion product from weatherfeeder v0.8.3
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful

This commit is contained in:
2026-03-28 17:36:35 -05:00
parent 291a9178c8
commit 0bccfc50d9
18 changed files with 651 additions and 3 deletions

View File

@@ -0,0 +1,45 @@
// discussion_mapper.go maps forecast discussion rows into weather model payloads.
// Layer: adapters/outbound/postgres discussion feature.
package postgres
import (
"database/sql"
"strings"
"gitea.maximumdirect.net/ejr/weatherfeeder/model"
)
func mapDiscussionParentRow(row discussionParentRow) model.WeatherForecastDiscussion {
return model.WeatherForecastDiscussion{
OfficeID: stringValue(row.OfficeID),
OfficeName: stringValue(row.OfficeName),
Product: model.ForecastDiscussionProduct(strings.TrimSpace(row.Product)),
IssuedAt: row.IssuedAt.UTC(),
UpdatedAt: timePtr(row.UpdatedAt),
ShortTerm: discussionSectionPtr(row.ShortTermQualifier, row.ShortTermIssuedAt, row.ShortTermText),
LongTerm: discussionSectionPtr(row.LongTermQualifier, row.LongTermIssuedAt, row.LongTermText),
KeyMessages: nil,
}
}
func mapDiscussionKeyMessageRow(row discussionKeyMessageRow) string {
return stringValue(row.MessageText)
}
func discussionSectionPtr(
qualifier sql.NullString,
issuedAt sql.NullTime,
text sql.NullString,
) *model.WeatherForecastDiscussionSection {
q := stringValue(qualifier)
t := stringValue(text)
i := timePtr(issuedAt)
if q == "" && t == "" && i == nil {
return nil
}
return &model.WeatherForecastDiscussionSection{
Qualifier: q,
IssuedAt: i,
Text: t,
}
}