fix(search): scope filter uppercase — fixes Smart Search 0 results bug
QA report BUG-005: "/search" возвращал 0 результатов на любые запросы
(«антенна», «GS_MOSCOW», «super» — всё пусто).
Root cause: SearchController convertedil scope enum в lowercase перед
WHERE filter:
data_scope = ANY(CAST(? AS TEXT[])) -- value: 'public'
Но DB stores UPPERCASE per migrations 0008/0009 CHECK constraint:
CHECK (data_scope IN ('PUBLIC', 'INTERNAL', 'RESTRICTED'))
Filter 'public' никогда не матчил 'PUBLIC' → empty result для всех queries.
Багу 5+ месяцев — comment в коде утверждал что DB lowercase, что было
неправдой даже в момент написания.
Fix: убрать .toLowerCase() — pass enum names как есть. Verified:
curl /api/v1/antenna/records?as_scope=PUBLIC возвращает GS_MOSCOW_A1
но curl /api/v1/search?q=GS_MOSCOW возвращал 0. После fix должен матчить.
This commit is contained in:
+4
-3
@@ -52,11 +52,12 @@ public class SearchController {
|
|||||||
@RequestParam String q,
|
@RequestParam String q,
|
||||||
@RequestParam(defaultValue = "100") int size,
|
@RequestParam(defaultValue = "100") int size,
|
||||||
@RequestParam(defaultValue = "10") int perDict) {
|
@RequestParam(defaultValue = "10") int perDict) {
|
||||||
|
// DB column data_scope использует UPPERCASE per migrations 0008/0009 CHECK
|
||||||
|
// constraint (PUBLIC/INTERNAL/RESTRICTED). Раньше был .toLowerCase() с
|
||||||
|
// неверным комментарием — все search queries возвращали 0 (filter
|
||||||
|
// 'public' не матчил 'PUBLIC'). QA report BUG-005.
|
||||||
var scopeStrings = scopeContext.currentScopes().stream()
|
var scopeStrings = scopeContext.currentScopes().stream()
|
||||||
.map(DataScope::name)
|
.map(DataScope::name)
|
||||||
// DB column data_scope использует lowercase per CHECK constraint
|
|
||||||
// ("public"/"internal"/"restricted"). Mapping enum → lowercase.
|
|
||||||
.map(String::toLowerCase)
|
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
List<RecordSearchQuery.SearchHit> hits = searchQuery.search(
|
List<RecordSearchQuery.SearchHit> hits = searchQuery.search(
|
||||||
|
|||||||
Reference in New Issue
Block a user