Add parsing for Stations

This commit is contained in:
Fred Boniface
2024-06-30 09:45:16 +01:00
parent a153fd4990
commit 358e69bec7
5 changed files with 66 additions and 4 deletions

View File

@@ -12,5 +12,8 @@ func run() {
fmt.Println(err)
}
parseData(data, data2)
_, err = parseData(data, data2)
if err != nil {
fmt.Println(err)
}
}

View File

@@ -7,6 +7,7 @@ import (
"git.fjla.uk/owlboard/go-types/pkg/database"
"git.fjla.uk/owlboard/go-types/pkg/upstreamApi"
"git.fjla.uk/owlboard/timetable-mgr/dbAccess"
)
// Parses n number of XML byte arrays
@@ -20,9 +21,16 @@ func parseData(data ...[]byte) ([]database.Station, error) {
stations = append(stations, parsedStations...)
}
fmt.Println(stations)
return nil, nil
// Transform from upstreamApi.Station to database.Station
var output []database.Station
for _, s := range stations {
outputStation, err := convertApiToDatabase(s)
if err != nil {
return nil, err
}
output = append(output, outputStation)
}
fmt.Println(output)
return output, nil
}
// Parses XML and converts to struct
@@ -38,3 +46,37 @@ func parseXML(data []byte) ([]upstreamApi.Station, error) {
return stationList.Stations, nil
}
// Convert API type to Database type ready for insertion
func convertApiToDatabase(data upstreamApi.Station) (database.Station, error) {
if data.CrsCode == "" {
return database.Station{}, fmt.Errorf("CRS code is required but missing")
}
tiploc, err := dbAccess.GetTiplocFromCrs(data.CrsCode)
if err != nil {
return database.Station{}, err
}
stanox, err := dbAccess.GetStanoxFromCrs(data.CrsCode)
if err != nil {
return database.Station{}, err
}
output := database.Station{
CRS: data.CrsCode,
TIPLOC: tiploc,
STANOX: stanox,
NLCDESC: data.Name,
Location: database.GeoJson{
Type: "Point",
Coordinates: []float64{
data.Longitude,
data.Latitude,
},
},
Operator: data.StationOperator,
}
return output, nil
}