Refactored the application structure to better separate concerns between files and packages
Some checks failed
ci/woodpecker/push/build-image Pipeline failed
Some checks failed
ci/woodpecker/push/build-image Pipeline failed
This commit is contained in:
70
internal/adapters/outbound/postgres/alerts_mapper.go
Normal file
70
internal/adapters/outbound/postgres/alerts_mapper.go
Normal file
@@ -0,0 +1,70 @@
|
||||
// alerts_mapper.go maps alert rows into weather model payloads.
|
||||
// Layer: adapters/outbound/postgres alerts feature.
|
||||
package postgres
|
||||
|
||||
import "gitea.maximumdirect.net/ejr/weatherfeeder/model"
|
||||
|
||||
func mapAlertRunParentRow(row alertRunParentRow) model.WeatherAlertRun {
|
||||
return model.WeatherAlertRun{
|
||||
LocationID: stringValue(row.LocationID),
|
||||
LocationName: stringValue(row.LocationName),
|
||||
AsOf: row.AsOf.UTC(),
|
||||
Latitude: float64Ptr(row.Latitude),
|
||||
Longitude: float64Ptr(row.Longitude),
|
||||
}
|
||||
}
|
||||
|
||||
func mapAlertRow(row alertRow) indexedAlert {
|
||||
return indexedAlert{
|
||||
Index: row.AlertIndex,
|
||||
Alert: model.WeatherAlert{
|
||||
ID: row.AlertID,
|
||||
Event: stringValue(row.Event),
|
||||
Headline: stringValue(row.Headline),
|
||||
Severity: stringValue(row.Severity),
|
||||
Urgency: stringValue(row.Urgency),
|
||||
Certainty: stringValue(row.Certainty),
|
||||
Status: stringValue(row.Status),
|
||||
MessageType: stringValue(row.MessageType),
|
||||
Category: stringValue(row.Category),
|
||||
Response: stringValue(row.Response),
|
||||
Description: stringValue(row.Description),
|
||||
Instruction: stringValue(row.Instruction),
|
||||
Sent: timePtr(row.Sent),
|
||||
Effective: timePtr(row.Effective),
|
||||
Onset: timePtr(row.Onset),
|
||||
Expires: timePtr(row.Expires),
|
||||
AreaDescription: stringValue(row.AreaDescription),
|
||||
SenderName: stringValue(row.SenderName),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func mapAlertReferenceRow(row alertReferenceRow) indexedAlertReference {
|
||||
return indexedAlertReference{
|
||||
AlertIndex: row.AlertIndex,
|
||||
Reference: model.AlertReference{
|
||||
ID: stringValue(row.ID),
|
||||
Identifier: stringValue(row.Identifier),
|
||||
Sender: stringValue(row.Sender),
|
||||
Sent: timePtr(row.Sent),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func attachAlertReferences(alerts []indexedAlert, references []indexedAlertReference) []model.WeatherAlert {
|
||||
refsByAlertIndex := make(map[int][]model.AlertReference, len(alerts))
|
||||
for _, ref := range references {
|
||||
refsByAlertIndex[ref.AlertIndex] = append(refsByAlertIndex[ref.AlertIndex], ref.Reference)
|
||||
}
|
||||
|
||||
out := make([]model.WeatherAlert, 0, len(alerts))
|
||||
for _, alert := range alerts {
|
||||
mapped := alert.Alert
|
||||
if refs := refsByAlertIndex[alert.Index]; len(refs) > 0 {
|
||||
mapped.References = refs
|
||||
}
|
||||
out = append(out, mapped)
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user