package kmb import ( query "github.com/tgckpg/golifehk/query" "log" "strings" ) func Query(q query.QueryMessage) query.IQueryResult { lang := q.Lang var qo *query.QueryObject var err error var routeStops *[]query.ISearchable qr := QueryResult{ Lang: lang, FallbackNearest: 3, NearestRange: 50, } busStops, err := readBusStopsData() if err != nil { qr.Error = err goto qrReturn } routeStops, err = getRouteStops(busStops) if err != nil { qr.Error = err goto qrReturn } if q.Text != "" { qo, err = query.MatchKeys(strings.ToUpper(q.Text), routeStops) } else if q.Location != nil { bList := []query.ISearchable{} for _, b := range *busStops { bList = append(bList, b) } qo, err = query.MatchNearest(*q.Location, &bList, qr.NearestRange, qr.FallbackNearest) } qo.Message = &q if err != nil { qr.Error = err goto qrReturn } qr.Query = qo 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[r] = schedules } qr.Schedules = &rSchedules } qrReturn: if qr.Error != nil { log.Println(qr.Error) } var iqr query.IQueryResult iqr = &qr return iqr }