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