aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--internal/webui/root.go29
-rw-r--r--pkg/model/departures.go6
-rw-r--r--pkg/navitia_api_client/departures.go16
-rw-r--r--pkg/navitia_api_client/departures_test.go8
6 files changed, 36 insertions, 29 deletions
diff --git a/go.mod b/go.mod
index f96c883..04a484f 100644
--- a/go.mod
+++ b/go.mod
@@ -9,7 +9,7 @@ require (
github.com/kr/pretty v0.2.1 // indirect
github.com/mattn/go-sqlite3 v1.14.7
github.com/stretchr/testify v1.7.0
- golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b
+ golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)
diff --git a/go.sum b/go.sum
index cfa6310..0d6bbc6 100644
--- a/go.sum
+++ b/go.sum
@@ -17,8 +17,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4P3zksTg4X4aJCDpZzmgQI=
+golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
diff --git a/internal/webui/root.go b/internal/webui/root.go
index c3a0ec5..ab6fdcd 100644
--- a/internal/webui/root.go
+++ b/internal/webui/root.go
@@ -5,7 +5,6 @@ import (
"html/template"
"log"
"net/http"
- "time"
"git.adyxax.org/adyxax/trains/pkg/model"
)
@@ -15,38 +14,30 @@ var rootTemplate = template.Must(template.ParseFS(templatesFS, "html/base.html",
// The page template variable
type Page struct {
User *model.User
- Departures []Departure
+ Departures []model.Departure
Title string
}
-type Departure struct {
- DisplayName string
- Arrival string
- Odd bool
-}
// The root handler of the webui
func rootHandler(e *env, w http.ResponseWriter, r *http.Request) error {
if r.URL.Path == "/" {
- var p Page
user, err := tryAndResumeSession(e, r)
if err != nil {
http.Redirect(w, r, "/login", http.StatusFound)
return nil
}
- p.User = user
- if d, err := e.navitia.GetDepartures(e.conf.TrainStop); err != nil {
- log.Printf("%+v\n%s\n", d, err)
+ var departures []model.Departure
+ if departures, err := e.navitia.GetDepartures(e.conf.TrainStop); err != nil {
+ log.Printf("%s; data returned: %+v\n", err, departures)
+ return newStatusError(http.StatusInternalServerError, fmt.Errorf("Could not get departures"))
} else {
- for i := 0; i < len(d.Departures); i++ {
- t, err := time.Parse("20060102T150405", d.Departures[i].StopDateTime.ArrivalDateTime)
- if err != nil {
- panic(err)
- }
- p.Departures = append(p.Departures, Departure{d.Departures[i].DisplayInformations.Direction, t.Format("Mon, 02 Jan 2006 15:04:05"), i%2 == 1})
- }
w.Header().Set("Cache-Control", "no-store, no-cache")
}
- p.Title = "Horaires des prochains trains à Crépieux la Pape"
+ p := Page{
+ User: user,
+ Departures: departures,
+ Title: "Horaires des prochains trains à Crépieux la Pape",
+ }
err = rootTemplate.ExecuteTemplate(w, "root.html", p)
if err != nil {
return newStatusError(http.StatusInternalServerError, err)
diff --git a/pkg/model/departures.go b/pkg/model/departures.go
new file mode 100644
index 0000000..7359d1b
--- /dev/null
+++ b/pkg/model/departures.go
@@ -0,0 +1,6 @@
+package model
+
+type Departure struct {
+ Direction string
+ Arrival string
+}
diff --git a/pkg/navitia_api_client/departures.go b/pkg/navitia_api_client/departures.go
index cd75191..3b7053d 100644
--- a/pkg/navitia_api_client/departures.go
+++ b/pkg/navitia_api_client/departures.go
@@ -5,6 +5,8 @@ import (
"fmt"
"net/http"
"time"
+
+ "git.adyxax.org/adyxax/trains/pkg/model"
)
type DeparturesResponse struct {
@@ -43,14 +45,14 @@ type DeparturesResponse struct {
} `json:"context"`
}
-func (c *Client) GetDepartures(trainStop string) (departures *DeparturesResponse, err error) {
+func (c *Client) GetDepartures(trainStop string) (departures []model.Departure, err error) {
request := fmt.Sprintf("%s/coverage/sncf/stop_areas/%s/departures", c.baseURL, trainStop)
start := time.Now()
c.mutex.Lock()
defer c.mutex.Unlock()
if cachedResult, ok := c.cache[request]; ok {
if start.Sub(cachedResult.ts) < 60*1000*1000*1000 {
- return cachedResult.result.(*DeparturesResponse), nil
+ return cachedResult.result.([]model.Departure), nil
}
}
req, err := http.NewRequest("GET", request, nil)
@@ -62,9 +64,17 @@ func (c *Client) GetDepartures(trainStop string) (departures *DeparturesResponse
return nil, err
}
defer resp.Body.Close()
- if err = json.NewDecoder(resp.Body).Decode(&departures); err != nil {
+ var data DeparturesResponse
+ if err = json.NewDecoder(resp.Body).Decode(&data); err != nil {
return nil, err
}
+ for i := 0; i < len(data.Departures); i++ {
+ t, err := time.Parse("20060102T150405", data.Departures[i].StopDateTime.ArrivalDateTime)
+ if err != nil { // TODO fail better
+ panic(err)
+ }
+ departures = append(departures, model.Departure{data.Departures[i].DisplayInformations.Direction, t.Format("Mon, 02 Jan 2006 15:04:05")})
+ }
c.cache[request] = cachedResult{
ts: start,
result: departures,
diff --git a/pkg/navitia_api_client/departures_test.go b/pkg/navitia_api_client/departures_test.go
index e7d771f..9b2f52c 100644
--- a/pkg/navitia_api_client/departures_test.go
+++ b/pkg/navitia_api_client/departures_test.go
@@ -42,8 +42,8 @@ func TestGetDepartures(t *testing.T) {
if err != nil {
t.Fatalf("could not get normal-crepieux departures : %s", err)
}
- if len(departures.Departures) != 10 {
- t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures.Departures))
+ if len(departures) != 10 {
+ t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures))
}
// test the cache (assuming the test takes less than 60 seconds (and it really should) it will be accurate)
ts.Close()
@@ -51,7 +51,7 @@ func TestGetDepartures(t *testing.T) {
if err != nil {
t.Fatalf("could not get normal-crepieux departures : %s", err)
}
- if len(departures.Departures) != 10 {
- t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures.Departures))
+ if len(departures) != 10 {
+ t.Fatalf("did not decode normal-crepieux departures properly, got %d departures when expected 10", len(departures))
}
}