From a17b86640f7e5cc039f2b694207d37c10c0377d5 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Fri, 26 Apr 2019 23:34:11 +0200 Subject: [PATCH] Merge realtime and plan data --- main.go | 32 +++++++++----------------------- merge.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 merge.go diff --git a/main.go b/main.go index 7de1981..46092ff 100644 --- a/main.go +++ b/main.go @@ -133,33 +133,19 @@ func main() { log.Fatal(err) return } - - if err = returnJson(w, timetable); err != nil { + var realtime bahn.Timetable + if realtime, err = apiClient.RealtimeAll(evaId, date); err != nil { log.Fatal(err) return } - }) - http.HandleFunc("/realtime/", func(w http.ResponseWriter, r *http.Request) { - var err error - - _, rawEvaId := path.Split(r.URL.Path) - rawEvaId = strings.TrimSpace(rawEvaId) - - var evaId int64 - if evaId, err = strconv.ParseInt(rawEvaId, 10, 64); err != nil { - log.Fatal(err) - return - } - - var date time.Time - if date, err = time.Parse(time.RFC3339, strings.TrimSpace(r.FormValue("time"))); err != nil { - date = time.Now() + realtimeData := make(map[string]*bahn.TimetableStop) + for i := range realtime.Stops { + stop := realtime.Stops[i] + realtimeData[stop.StopId] = &stop } - - var timetable bahn.Timetable - if timetable, err = apiClient.RealtimeAll(evaId, date); err != nil { - log.Fatal(err) - return + for i := range timetable.Stops { + stop := &timetable.Stops[i] + MergeTimetableStop(stop, realtimeData[stop.StopId]) } if err = returnJson(w, timetable); err != nil { diff --git a/merge.go b/merge.go new file mode 100644 index 0000000..d185c19 --- /dev/null +++ b/merge.go @@ -0,0 +1,41 @@ +package main + +import ( + "git.kuschku.de/justjanne/bahn-api" +) + +func MergeTimetableStop(data *bahn.TimetableStop, realtime *bahn.TimetableStop) { + if data == nil || realtime == nil { + return + } + + data.Messages = realtime.Messages + MergeTripLabel(&data.TripLabel, &realtime.TripLabel) + MergeTimetableStop(data.Ref, realtime.Ref) + MergeEvent(data.Arrival, realtime.Arrival) + MergeEvent(data.Departure, realtime.Departure) + data.HistoricDelays = realtime.HistoricDelays + data.HistoricPlatformChanges = realtime.HistoricPlatformChanges + data.Connections = realtime.Connections +} + +func MergeTripLabel(data *bahn.TripLabel, realtime *bahn.TripLabel) { + if data == nil || realtime == nil { + return + } + + data.Messages = realtime.Messages +} + +func MergeEvent(data *bahn.Event, realtime *bahn.Event) { + if data == nil || realtime == nil { + return + } + + data.Messages = realtime.Messages + data.ChangedPlatform = realtime.ChangedPlatform + data.ChangedTime = realtime.ChangedTime + data.ChangedPath = realtime.ChangedPath + data.ChangedDestination = realtime.ChangedDestination + data.ChangedStatus = realtime.ChangedStatus +} -- GitLab