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:
Zimin A.N.
2026-05-15 22:51:01 +03:00
parent ba9eeac53b
commit 35147df683
@@ -52,11 +52,12 @@ public class SearchController {
@RequestParam String q,
@RequestParam(defaultValue = "100") int size,
@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()
.map(DataScope::name)
// DB column data_scope использует lowercase per CHECK constraint
// ("public"/"internal"/"restricted"). Mapping enum → lowercase.
.map(String::toLowerCase)
.collect(Collectors.toList());
List<RecordSearchQuery.SearchHit> hits = searchQuery.search(