From e1c1c3c6afabdc0a8620778f27dde8e75a067764 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Fri, 26 Apr 2019 20:34:57 +0200
Subject: [PATCH] Refactored api client

---
 go.mod  |  2 +-
 go.sum  |  3 ++-
 main.go | 68 ++++++++++++++++++++++++++++++++++++++-------------------
 3 files changed, 48 insertions(+), 25 deletions(-)

diff --git a/go.mod b/go.mod
index fad95e9..27937bd 100644
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,4 @@ module git.kuschku.de/justjanne/bahn-proxy
 
 go 1.12
 
-require git.kuschku.de/justjanne/bahn-api v0.0.0-20190426164822-2005e844c1c3
+require git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2
diff --git a/go.sum b/go.sum
index b70bfc5..2852086 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,4 @@
-git.kuschku.de/justjanne/bahn-api v0.0.0-20190426164822-2005e844c1c3/go.mod h1:rpAScvoRtRrl72NB07uxpiWBo3V/wJxr+bFkSItGil4=
+git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2 h1:7ZO091t3gVKMuVUovC/Fdt952UpLI44OCd7A0XArRMw=
+git.kuschku.de/justjanne/bahn-api v0.0.0-20190426183324-6148fdeae5b2/go.mod h1:rpAScvoRtRrl72NB07uxpiWBo3V/wJxr+bFkSItGil4=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
index 426605a..7de1981 100644
--- a/main.go
+++ b/main.go
@@ -2,12 +2,12 @@ package main
 
 import (
 	"encoding/json"
-	"fmt"
 	"git.kuschku.de/justjanne/bahn-api"
 	"log"
 	"net/http"
 	"path"
 	"sort"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -29,8 +29,12 @@ func returnJson(w http.ResponseWriter, data interface{}) error {
 func main() {
 	autocompleteStations := loadAutocompleteStations()
 
-	var netClient = &http.Client{
-		Timeout: time.Second * 10,
+	apiClient := bahn.ApiClient{
+		IrisBaseUrl:          "http://iris.noncd.db.de/iris-tts",
+		CoachSequenceBaseUrl: "https://www.apps-bahn.de/wr/wagenreihung/1.0/",
+		HttpClient: &http.Client{
+			Timeout: time.Second * 10,
+		},
 	}
 
 	MaxResults := 20
@@ -87,25 +91,21 @@ func main() {
 	http.HandleFunc("/station/", func(w http.ResponseWriter, r *http.Request) {
 		var err error
 
-		_, evaId := path.Split(r.URL.Path)
-		evaId = strings.TrimSpace(evaId)
+		_, rawEvaId := path.Split(r.URL.Path)
+		rawEvaId = strings.TrimSpace(rawEvaId)
 
-		url := fmt.Sprintf("http://iris.noncd.db.de/iris-tts/timetable/station/%s", evaId)
-
-		var response *http.Response
-		if response, err = netClient.Get(url); err != nil {
+		var evaId int64
+		if evaId, err = strconv.ParseInt(rawEvaId, 10, 64); err != nil {
 			log.Fatal(err)
 			return
 		}
 
 		var stations []bahn.Station
-		if stations, err = bahn.StationsFromReader(response.Body); err != nil {
-			log.Fatal(err)
-		}
-		if err = response.Body.Close(); err != nil {
+		if stations, err = apiClient.Station(evaId); err != nil {
 			log.Fatal(err)
 			return
 		}
+
 		if err = returnJson(w, stations); err != nil {
 			log.Fatal(err)
 			return
@@ -114,32 +114,54 @@ func main() {
 	http.HandleFunc("/timetable/", func(w http.ResponseWriter, r *http.Request) {
 		var err error
 
-		_, evaId := path.Split(r.URL.Path)
-		evaId = strings.TrimSpace(evaId)
+		_, 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()
 		}
 
-		BahnFormat := "060102/15"
-
-		url := fmt.Sprintf("http://iris.noncd.db.de/iris-tts/timetable/plan/%s/%s", evaId, date.Format(BahnFormat))
+		var timetable bahn.Timetable
+		if timetable, err = apiClient.Timetable(evaId, date); err != nil {
+			log.Fatal(err)
+			return
+		}
 
-		var response *http.Response
-		if response, err = netClient.Get(url); err != nil {
+		if err = returnJson(w, timetable); err != nil {
 			log.Fatal(err)
 			return
 		}
+	})
+	http.HandleFunc("/realtime/", func(w http.ResponseWriter, r *http.Request) {
+		var err error
 
-		var timetable bahn.Timetable
-		if timetable, err = bahn.TimetableFromReader(response.Body); err != nil {
+		_, 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
 		}
-		if err = response.Body.Close(); err != nil {
+
+		var date time.Time
+		if date, err = time.Parse(time.RFC3339, strings.TrimSpace(r.FormValue("time"))); err != nil {
+			date = time.Now()
+		}
+
+		var timetable bahn.Timetable
+		if timetable, err = apiClient.RealtimeAll(evaId, date); err != nil {
 			log.Fatal(err)
 			return
 		}
+
 		if err = returnJson(w, timetable); err != nil {
 			log.Fatal(err)
 			return
-- 
GitLab