aboutsummaryrefslogtreecommitdiff
path: root/navitia_api_client/departures.go
diff options
context:
space:
mode:
Diffstat (limited to 'navitia_api_client/departures.go')
-rw-r--r--navitia_api_client/departures.go16
1 files changed, 15 insertions, 1 deletions
diff --git a/navitia_api_client/departures.go b/navitia_api_client/departures.go
index a6dcf53..7738940 100644
--- a/navitia_api_client/departures.go
+++ b/navitia_api_client/departures.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"net/http"
+ "time"
)
type DeparturesResponse struct {
@@ -43,7 +44,16 @@ type DeparturesResponse struct {
}
func (c *Client) GetDepartures() (departures *DeparturesResponse, err error) {
- req, err := http.NewRequest("GET", fmt.Sprintf("%s/coverage/sncf/stop_areas/stop_area:SNCF:87723502/departures", c.baseURL), nil)
+ request := fmt.Sprintf("%s/coverage/sncf/stop_areas/stop_area:SNCF:87723502/departures", c.baseURL)
+ 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
+ }
+ }
+ req, err := http.NewRequest("GET", request, nil)
if err != nil {
return nil, err
}
@@ -55,5 +65,9 @@ func (c *Client) GetDepartures() (departures *DeparturesResponse, err error) {
if err = json.NewDecoder(resp.Body).Decode(&departures); err != nil {
return nil, err
}
+ c.cache[request] = cachedResult{
+ ts: start,
+ result: departures,
+ }
return
}