Validate data before commit

This commit is contained in:
2026-03-01 19:22:15 +08:00
parent 6245ef6290
commit 8bd60a58bb
3 changed files with 231 additions and 185 deletions

View File

@@ -1,49 +1,53 @@
package kmb
import (
"strings"
query "github.com/tgckpg/golifehk/query"
query "github.com/tgckpg/golifehk/query"
"log"
"strings"
)
func Query( lang string, message string ) query.IQueryResult {
func Query(lang string, message string) query.IQueryResult {
var qo *query.QueryObject
var err error
var qo *query.QueryObject
var err error
qr := QueryResult{ Lang: lang }
routeStops, err := getRouteStops()
if err != nil {
qr.Error = err
goto qrReturn
}
qr := QueryResult{Lang: lang}
routeStops, err := getRouteStops()
if err != nil {
qr.Error = err
goto qrReturn
}
qo, err = query.Parse( strings.ToUpper( message ), routeStops )
if err != nil {
qr.Error = err
goto qrReturn
}
qo, err = query.Parse(strings.ToUpper(message), routeStops)
if err != nil {
qr.Error = err
goto qrReturn
}
qr.Query = qo
qr.Query = qo
if 0 < len( *qo.Results ) && 1 < len( *qo.SearchTerms ) {
if 0 < len(*qo.Results) && 1 < len(*qo.SearchTerms) {
rSchedules := map[*RouteStop] *[] *Schedule{}
for _, item := range *qo.Results {
var r *RouteStop
r = any( item ).( *RouteStop )
schedules, err := getSchedule( r )
if err != nil {
qr.Error = err
break
}
rSchedules := map[*RouteStop]*[]*Schedule{}
for _, item := range *qo.Results {
var r *RouteStop
r = any(item).(*RouteStop)
schedules, err := getSchedule(r)
if err != nil {
qr.Error = err
break
}
rSchedules[r] = schedules
}
qr.Schedules = &rSchedules
}
rSchedules[r] = schedules
}
qr.Schedules = &rSchedules
}
qrReturn:
var iqr query.IQueryResult
iqr = &qr
return iqr
qrReturn:
if qr.Error != nil {
log.Println(qr.Error)
}
var iqr query.IQueryResult
iqr = &qr
return iqr
}

View File

@@ -5,7 +5,6 @@ import (
"encoding/json"
"fmt"
"io"
"log"
"path/filepath"
query "github.com/tgckpg/golifehk/query"
@@ -99,33 +98,46 @@ func readBusStopsData(buff *bytes.Buffer) (*map[string]*BusStop, error) {
}
func getRouteStops() (*[]query.ISearchable, error) {
var busStopMap *map[string]*BusStop
QUERY_FUNC := func() (io.ReadCloser, error) {
return utils.HttpGet("https://data.etabus.gov.hk/v1/transport/kmb/stop")
}
buff, err := utils.CacheStream(JSON_BUSSTOPS, QUERY_FUNC, 7*24*3600)
PARSE_FUNC := func(buff *bytes.Buffer) error {
var err error
busStopMap, err = readBusStopsData(buff)
return err
}
cs, err := utils.CacheStreamEx(JSON_BUSSTOPS, QUERY_FUNC)
if err != nil {
return nil, err
}
busStopMap, err := readBusStopsData(buff)
err = cs.Try(PARSE_FUNC, 7*24*3600, 3)
if err != nil {
return nil, err
}
var routeStops *[]*RouteStop
QUERY_FUNC = func() (io.ReadCloser, error) {
return utils.HttpGet("https://data.etabus.gov.hk/v1/transport/kmb/route-stop")
}
buff, err = utils.CacheStream(JSON_ROUTESTOPS, QUERY_FUNC, 7*24*3600)
PARSE_FUNC = func(buff *bytes.Buffer) error {
var err error
routeStops, err = readRouteStopsData(busStopMap, buff)
return err
}
cs, err = utils.CacheStreamEx(JSON_ROUTESTOPS, QUERY_FUNC)
if err != nil {
return nil, err
}
routeStops, err := readRouteStopsData(busStopMap, buff)
err = cs.Try(PARSE_FUNC, 7*24*3600, 3)
if err != nil {
log.Printf("Unable to parse RouteStopsData: %s", err)
return nil, err
}