szczanieckiej.git

commit 9436ae0fca3726ce184a4dbd39d1c8d075ce27e2

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
 }