58 lines
2.4 KiB
Go
58 lines
2.4 KiB
Go
// forecast_mapper.go maps forecast rows into weather model payloads.
|
|
// Layer: adapters/outbound/postgres forecast feature.
|
|
package postgres
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"gitea.maximumdirect.net/ejr/weatherfeeder/model"
|
|
)
|
|
|
|
func mapForecastParentRow(row forecastParentRow) model.WeatherForecastRun {
|
|
return model.WeatherForecastRun{
|
|
LocationID: stringValue(row.LocationID),
|
|
LocationName: stringValue(row.LocationName),
|
|
IssuedAt: row.IssuedAt.UTC(),
|
|
UpdatedAt: timePtr(row.UpdatedAt),
|
|
Product: model.ForecastProduct(row.Product),
|
|
Latitude: float64Ptr(row.Latitude),
|
|
Longitude: float64Ptr(row.Longitude),
|
|
ElevationMeters: float64Ptr(row.ElevationMeters),
|
|
}
|
|
}
|
|
|
|
func mapForecastPeriodRow(row forecastPeriodRow) model.WeatherForecastPeriod {
|
|
return model.WeatherForecastPeriod{
|
|
StartTime: row.StartTime.UTC(),
|
|
EndTime: row.EndTime.UTC(),
|
|
Name: stringValue(row.Name),
|
|
IsDay: boolPtr(row.IsDay),
|
|
ConditionCode: wmoCodePtr(row.ConditionCode),
|
|
TextDescription: stringValue(row.TextDescription),
|
|
TemperatureC: float64Ptr(row.TemperatureC),
|
|
TemperatureCMin: float64Ptr(row.TemperatureCMin),
|
|
TemperatureCMax: float64Ptr(row.TemperatureCMax),
|
|
DewpointC: float64Ptr(row.DewpointC),
|
|
RelativeHumidityPercent: float64Ptr(row.RelativeHumidityPercent),
|
|
WindDirectionDegrees: float64Ptr(row.WindDirectionDegrees),
|
|
WindSpeedKmh: float64Ptr(row.WindSpeedKmh),
|
|
WindGustKmh: float64Ptr(row.WindGustKmh),
|
|
BarometricPressurePa: float64Ptr(row.BarometricPressurePa),
|
|
VisibilityMeters: float64Ptr(row.VisibilityMeters),
|
|
ApparentTemperatureC: float64Ptr(row.ApparentTemperatureC),
|
|
CloudCoverPercent: float64Ptr(row.CloudCoverPercent),
|
|
ProbabilityOfPrecipitationPercent: float64Ptr(row.ProbabilityOfPrecipitationPercent),
|
|
PrecipitationAmountMm: float64Ptr(row.PrecipitationAmountMM),
|
|
SnowfallDepthMM: float64Ptr(row.SnowfallDepthMM),
|
|
UVIndex: float64Ptr(row.UVIndex),
|
|
}
|
|
}
|
|
|
|
func wmoCodePtr(v sql.NullInt64) *model.WMOCode {
|
|
if !v.Valid {
|
|
return nil
|
|
}
|
|
out := model.WMOCode(v.Int64)
|
|
return &out
|
|
}
|