Reimplement sort by line direction
This commit is contained in:
parent
a0659dd9bd
commit
da0187b74d
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -14,24 +15,26 @@ import (
|
|||||||
|
|
||||||
const IDFM_BASEURL = "https://api-iv.iledefrance-mobilites.fr/"
|
const IDFM_BASEURL = "https://api-iv.iledefrance-mobilites.fr/"
|
||||||
|
|
||||||
|
type IDFMRealTimeData struct {
|
||||||
|
LineId string `json:"lineId"`
|
||||||
|
ShortName string `json:"shortName"`
|
||||||
|
VehicleName string `json:"vehicleName,omitempty"`
|
||||||
|
LineDirection string `json:"lineDirection"`
|
||||||
|
Sens string `json:"sens,omitempty"`
|
||||||
|
Code string `json:"code,omitempty"`
|
||||||
|
Time string `json:"time"`
|
||||||
|
Schedule string `json:"schedule"`
|
||||||
|
Destination struct {
|
||||||
|
StopPointId string `json:"stopPointId"`
|
||||||
|
StopAreaId string `json:"stopAreaId"`
|
||||||
|
} `json:"destination,omitempty"`
|
||||||
|
Source string `json:"source,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type IDFMRealTime struct {
|
type IDFMRealTime struct {
|
||||||
NextDepartures struct {
|
NextDepartures struct {
|
||||||
StatusCode int `json:"statusCode"`
|
StatusCode int `json:"statusCode"`
|
||||||
Data []struct {
|
Data []IDFMRealTimeData `json:"data"`
|
||||||
LineId string `json:"lineId"`
|
|
||||||
ShortName string `json:"shortName"`
|
|
||||||
VehicleName string `json:"vehicleName,omitempty"`
|
|
||||||
LineDirection string `json:"lineDirection"`
|
|
||||||
Sens string `json:"sens,omitempty"`
|
|
||||||
Code string `json:"code,omitempty"`
|
|
||||||
Time string `json:"time"`
|
|
||||||
Schedule string `json:"schedule"`
|
|
||||||
Destination struct {
|
|
||||||
StopPointId string `json:"stopPointId"`
|
|
||||||
StopAreaId string `json:"stopAreaId"`
|
|
||||||
} `json:"destination,omitempty"`
|
|
||||||
Source string `json:"source,omitempty"`
|
|
||||||
} `json:"data"`
|
|
||||||
} `json:"nextDepartures"`
|
} `json:"nextDepartures"`
|
||||||
CrowdsourcingReports struct {
|
CrowdsourcingReports struct {
|
||||||
congestions []struct {
|
congestions []struct {
|
||||||
@ -43,6 +46,34 @@ type IDFMRealTime struct {
|
|||||||
} `json:"crowdsourcingReports"`
|
} `json:"crowdsourcingReports"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ByRealTime []IDFMRealTimeData
|
||||||
|
|
||||||
|
func (s ByRealTime) Len() int {
|
||||||
|
return len(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s ByRealTime) Less(i, j int) bool {
|
||||||
|
if s[i].Sens == s[j].Sens {
|
||||||
|
nj, err := strconv.Atoi(s[j].Time)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
ni, err := strconv.Atoi(s[i].Time)
|
||||||
|
if err != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return ni < nj
|
||||||
|
} else {
|
||||||
|
return s[i].Sens < s[j].Sens
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s ByRealTime) Swap(i, j int) {
|
||||||
|
s[i], s[j] = s[j], s[i]
|
||||||
|
}
|
||||||
|
|
||||||
type PGSchedule struct {
|
type PGSchedule struct {
|
||||||
Destination string `json:"destination"`
|
Destination string `json:"destination"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
@ -129,6 +160,8 @@ func declareSchedulesRoutes(router *gin.RouterGroup) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sort.Sort(ByRealTime(schedules.NextDepartures.Data))
|
||||||
|
|
||||||
pgs := []PGSchedule{}
|
pgs := []PGSchedule{}
|
||||||
for _, vehicule := range schedules.NextDepartures.Data {
|
for _, vehicule := range schedules.NextDepartures.Data {
|
||||||
if (way == "A" && vehicule.Sens == "-1") || (way == "R" && vehicule.Sens == "1") {
|
if (way == "A" && vehicule.Sens == "-1") || (way == "R" && vehicule.Sens == "1") {
|
||||||
|
@ -15,3 +15,11 @@ func (t *IDFMTime) UnmarshalJSON(b []byte) error {
|
|||||||
func (t IDFMTime) MarshalJSON() ([]byte, error) {
|
func (t IDFMTime) MarshalJSON() ([]byte, error) {
|
||||||
return []byte(time.Time(t).Format("\"2006-01-02T15:04\"")), nil
|
return []byte(time.Time(t).Format("\"2006-01-02T15:04\"")), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *IDFMTime) After(d IDFMTime) bool {
|
||||||
|
return time.Time(*t).After(time.Time(d))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t IDFMTime) String() string {
|
||||||
|
return time.Time(t).String()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user