60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package bus
|
|
|
|
import (
|
|
"strings"
|
|
query "github.com/tgckpg/golifehk/query"
|
|
)
|
|
|
|
func Query( lang string, message string ) query.IQueryResult {
|
|
|
|
var qBusStops *query.QueryObject
|
|
var err error
|
|
|
|
qr := QueryResult{ Lang: lang }
|
|
busStops, err := getBusStops()
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
qBusStops, err = query.Parse( strings.ToUpper( message ), busStops )
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
qr.Query = qBusStops
|
|
if 0 < len( *qBusStops.Results ) && 1 < len( *qBusStops.SearchTerms ) {
|
|
schedules, err := getSchedule( lang, qBusStops.Key )
|
|
if err != nil {
|
|
qr.Error = err
|
|
goto qrReturn
|
|
}
|
|
|
|
if len( schedules.BusStops ) == 0 {
|
|
qr.Schedules = &map[*BusStop] *BusStopBuses{}
|
|
goto qrReturn
|
|
}
|
|
|
|
matches := map[*BusStop] *BusStopBuses{}
|
|
for _, entry := range *qBusStops.Results {
|
|
busStop := any( entry ).( *BusStop )
|
|
|
|
for _, busStopSch := range schedules.BusStops {
|
|
if busStopSch.BusStopId == busStop.StationId {
|
|
matches[busStop] = &busStopSch
|
|
break
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
qr.Schedules = &matches
|
|
}
|
|
|
|
qrReturn:
|
|
var iqr query.IQueryResult
|
|
iqr = &qr
|
|
return iqr
|
|
}
|