Author: Adam <git@apiote.xyz>
deduplicate queryables needed when translations are available for stops and lines
traffic/access.go | 26 +++++++++++++++++++-------
diff --git a/traffic/access.go b/traffic/access.go index 137db9de832ecf2e2f8359dfeb3831003878d804..79ea4a37dcda7e0ae33f504fb41d286213dc9d3a 100644 --- a/traffic/access.go +++ b/traffic/access.go @@ -983,37 +983,49 @@ } func QueryLines(query string, dataHome string, feedName string, versionCode Validity, traffic *Traffic) ([]Line, error) { - lines := []Line{} + linesSet := map[string]Line{} index := traffic.LineIndexes[feedName][versionCode] cleanQuery, err := CleanQuery(query, traffic.Feeds[feedName]) if err != nil { - return lines, fmt.Errorf("while cleaning query: %w", err) + return []Line{}, fmt.Errorf("while cleaning query: %w", err) } results := fuzzy.FindFrom(cleanQuery, index) for _, result := range results { for _, offset := range index[result.Index].Offsets { line, err := getLineByOffset(offset, dataHome, feedName, versionCode) if err != nil { - return lines, fmt.Errorf("while getting line for %s: %w", result.Str, err) + return []Line{}, fmt.Errorf("while getting line for %s: %w", result.Str, err) } - lines = append(lines, line) + linesSet[line.Name] = line } } + lines := make([]Line, len(linesSet)) + i := 0 + for _, line := range linesSet { + lines[i] = line + i++ + } return lines, nil } func QueryStops(query string, context Context, traffic *Traffic) ([]Stop, error) { - stops := []Stop{} + stopsSet := map[string]Stop{} nameIndex := traffic.NameIndexes[context.FeedID][context.Version] results := fuzzy.FindFrom(query, nameIndex) for _, result := range results { for _, offset := range nameIndex[result.Index].Offsets { stop, err := getStopByOffset(offset, context, traffic) if err != nil { - return stops, err + return []Stop{}, err } - stops = append(stops, stop) + stopsSet[stop.Id] = stop } + } + stops := make([]Stop, len(stopsSet)) + i := 0 + for _, stop := range stopsSet { + stops[i] = stop + i++ } return stops, nil }