fix(selos): normalizar filtro de selos para case-insensitive

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.
This commit is contained in:
Frederico Castro
2025-12-28 00:20:35 -03:00
parent 6b07cecf4e
commit 015c8f5741
3 changed files with 15 additions and 6 deletions

View File

@@ -97,8 +97,8 @@ class RankingOracleRepository:
if filtro_selos: if filtro_selos:
for i, selo in enumerate(filtro_selos): for i, selo in enumerate(filtro_selos):
param_name = f"selo_{i}" param_name = f"selo_{i}"
where_clauses.append(f"((',' || SELOS || ',') LIKE '%,' || :{param_name} || ',%')") where_clauses.append(f"((',' || UPPER(SELOS) || ',') LIKE '%,' || :{param_name} || ',%')")
params[param_name] = selo params[param_name] = str(selo).upper()
where_clause = "" where_clause = ""
if where_clauses: if where_clauses:
@@ -175,8 +175,8 @@ class RankingOracleRepository:
if filtro_selos: if filtro_selos:
for i, selo in enumerate(filtro_selos): for i, selo in enumerate(filtro_selos):
param_name = f"selo_{i}" param_name = f"selo_{i}"
where_clauses.append(f"((',' || SELOS || ',') LIKE '%,' || :{param_name} || ',%')") where_clauses.append(f"((',' || UPPER(SELOS) || ',') LIKE '%,' || :{param_name} || ',%')")
params[param_name] = selo params[param_name] = str(selo).upper()
where_clause = "" where_clause = ""
if where_clauses: if where_clauses:

View File

@@ -214,7 +214,11 @@ async def ranking_paginado(
if not oracle_repo: if not oracle_repo:
raise HTTPException(status_code=503, detail="Oracle não configurado") 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) total = oracle_repo.contar_total(filtro_ativo=ativo, filtro_selos=selos_lista)
if total == 0: if total == 0:

View File

@@ -12,7 +12,12 @@ export const rankingService = {
async getRanking(page = 1, size = 100, selos = []) { async getRanking(page = 1, size = 100, selos = []) {
const params = { page, size }; const params = { page, size };
if (selos && selos.length > 0) { 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 response = await api.get('/ranking/paginado', { params });
const data = response.data; const data = response.data;