Skip to content

feat (cep v3): Criação de uma rota de consulta de cep com autocomplete de faixas de cep#549

Open
vinimrs wants to merge 1 commit intoBrasilAPI:mainfrom
vinimrs:main
Open

feat (cep v3): Criação de uma rota de consulta de cep com autocomplete de faixas de cep#549
vinimrs wants to merge 1 commit intoBrasilAPI:mainfrom
vinimrs:main

Conversation

@vinimrs
Copy link
Copy Markdown

@vinimrs vinimrs commented Nov 30, 2023

Cep V3, sugestões de zonas de CEP baseados em prefixos com consulta natural em casos completos.

Baseado em um arquivo .csv, contendo todas as cidades do Brasil, e um determinada ‘range’ de CEP’s, foi implementado um sistema de “autocomplete”, ou seja, ao ser fornecido um CEP incompleto, a API fornece uma lista de possíveis cidades que iniciam com os dígitos fornecidos ou se encontram em uma determinada faixa de CEP.

Screenshot from 2023-11-30 06-47-46

#264

…omplete de faixas de cep

Baseado em um arquivo .csv, contendo todas as cidades do Brasil, e um determinada ‘range’ de CEP’s,
foi implementado um sistema de “autocomplete”, ou seja, ao ser fornecido um CEP incompleto, a API
fornece uma lista de possíveis cidades que iniciam com os dígitos fornecidos ou se encontram em uma
determinada faixa de CEP.

BrasilAPI#264
@vercel
Copy link
Copy Markdown

vercel bot commented Nov 30, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
brasilapi ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 30, 2023 9:49am

@sonarqubecloud
Copy link
Copy Markdown

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
No Duplication information No Duplication information

@vinimrs vinimrs changed the title feat(cep v3): criei uma rota de consulta de ceps. Adicionei um autoc… feat (cep v3): Criação de uma rota de consulta de cep com autocomplete de faixas de cep Nov 30, 2023
@lucianopf
Copy link
Copy Markdown
Member

Olá @vinimrs, a ideia de autocomplete de CEPs é interessante! Mas o PR precisa de uma refatoração significativa antes do merge.

Bloqueadores:

1. package.json e package-lock.json com versões muito antigas

O PR foi criado a partir de um fork antigo. O package.json no diff mostra "next": "10.2.0" e "node": ">=16 <17", enquanto o projeto atual usa next: 12.x e node: >=20 <22. O lock file tem 16k+ linhas de diffs. Essas mudanças rebaixariam as dependências do projeto. Atualize o fork com o main atual e remova todas as mudanças em package.json e package-lock.json que não sejam os novos pacotes que você está adicionando.

2. Handler não usa o padrão do projeto

// ❌ atual
export default cors(Cep);

// ✅ correto
export default app().get(action);

O app() já inclui CORS, cache, logger, firewall e errorHandler. Use-o.

3. Sem classes de erro do projeto

// ❌ atual
response.status(400); return response.json(error);

// ✅ correto
throw new BadRequestError({ message: '...' });

Deixe o errorHandler middleware formatar erros. Não use response.status() manual nos handlers.

4. CSV lido do disco em cada requisição

const json = await csvToJson().fromFile(csvFilePath); // leitura em toda request!

Em serverless, isso é lento e não compartilha cache entre invocações. Considere importar o CSV como módulo no topo do arquivo (ou usar import dinâmico com cache), para que seja lido apenas uma vez por instância.

5. Lógica de bloqueio de IP no handler

const tempBlockedIps = [];
const tempBlockedUserAgents = ['Go-http-client/2.0'];

Regras de bloqueio não pertencem a um handler específico. O firewall middleware (middlewares/firewall.js) já existe para isso.

6. Testes com sintaxe CommonJS e sem imports do Vitest

// ❌
const axios = require('axios');

// ✅
import axios from 'axios';
import { describe, test, expect } from 'vitest';

7. Testes com ordem de resultados hardcoded

expect(response.data[0]).toEqual({ state: 'SP', city: 'São Paulo', ... });
expect(response.data[1]).toEqual({ state: 'PR', city: 'Alto Paraná', ... });

A ordem dos resultados de autocomplete não é garantida. Prefira expect.arrayContaining([...]) ou ordene os resultados explicitamente no serviço.

8. ESLint no-else-return: 'off'

Não desabilite regras ESLint project-wide para um endpoint específico. Ajuste o código para respeitar a regra.


O conceito da feature é válido. Com as correções estruturais acima, pode ser um endpoint útil. Recomendo rebase do fork com main antes de refatorar.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants