From 35147df68336b872ea65151c913e70baba646a9c Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Fri, 15 May 2026 22:51:01 +0300 Subject: [PATCH] =?UTF-8?q?fix(search):=20scope=20filter=20uppercase=20?= =?UTF-8?q?=E2=80=94=20fixes=20Smart=20Search=200=20results=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 должен матчить. --- .../terravault/ordinis/restapi/web/SearchController.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SearchController.java b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SearchController.java index 8a86f18..0f14b68 100644 --- a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SearchController.java +++ b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SearchController.java @@ -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 hits = searchQuery.search(