From 015c8f57416d761d497934d8dc58ab6056ec16bc Mon Sep 17 00:00:00 2001 From: Frederico Castro Date: Sun, 28 Dec 2025 00:20:35 -0300 Subject: [PATCH] fix(selos): normalizar filtro de selos para case-insensitive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converte selos para uppercase em todas as camadas (frontend, API e repository) para garantir que o filtro funcione independente de como o usuário digita ou seleciona os selos. --- backend/src/infrastructure/oracle/ranking_repository.py | 8 ++++---- backend/src/interface/api/routes.py | 6 +++++- frontend/src/services/api.js | 7 ++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/backend/src/infrastructure/oracle/ranking_repository.py b/backend/src/infrastructure/oracle/ranking_repository.py index 3fd5766..f83493f 100644 --- a/backend/src/infrastructure/oracle/ranking_repository.py +++ b/backend/src/infrastructure/oracle/ranking_repository.py @@ -97,8 +97,8 @@ class RankingOracleRepository: if filtro_selos: for i, selo in enumerate(filtro_selos): param_name = f"selo_{i}" - where_clauses.append(f"((',' || SELOS || ',') LIKE '%,' || :{param_name} || ',%')") - params[param_name] = selo + where_clauses.append(f"((',' || UPPER(SELOS) || ',') LIKE '%,' || :{param_name} || ',%')") + params[param_name] = str(selo).upper() where_clause = "" if where_clauses: @@ -175,8 +175,8 @@ class RankingOracleRepository: if filtro_selos: for i, selo in enumerate(filtro_selos): param_name = f"selo_{i}" - where_clauses.append(f"((',' || SELOS || ',') LIKE '%,' || :{param_name} || ',%')") - params[param_name] = selo + where_clauses.append(f"((',' || UPPER(SELOS) || ',') LIKE '%,' || :{param_name} || ',%')") + params[param_name] = str(selo).upper() where_clause = "" if where_clauses: diff --git a/backend/src/interface/api/routes.py b/backend/src/interface/api/routes.py index 9854a60..5fbcfcb 100644 --- a/backend/src/interface/api/routes.py +++ b/backend/src/interface/api/routes.py @@ -214,7 +214,11 @@ async def ranking_paginado( if not oracle_repo: raise HTTPException(status_code=503, detail="Oracle não configurado") - selos_lista = [s.strip() for s in selos.split(",") if s.strip()] if selos else None + selos_lista = ( + [s.strip().upper() for s in selos.split(",") if s.strip()] + if selos + else None + ) total = oracle_repo.contar_total(filtro_ativo=ativo, filtro_selos=selos_lista) if total == 0: diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index 5d8aedc..f80f13d 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -12,7 +12,12 @@ export const rankingService = { async getRanking(page = 1, size = 100, selos = []) { const params = { page, size }; if (selos && selos.length > 0) { - params.selos = selos.join(','); + const normalizados = selos + .map((s) => String(s || '').trim().toUpperCase()) + .filter(Boolean); + if (normalizados.length > 0) { + params.selos = normalizados.join(','); + } } const response = await api.get('/ranking/paginado', { params }); const data = response.data;