Skip to content

feat: Identificação de localização a partir de um Plus Code#554

Open
lucaspquadros wants to merge 1 commit intoBrasilAPI:mainfrom
mau0414:main
Open

feat: Identificação de localização a partir de um Plus Code#554
lucaspquadros wants to merge 1 commit intoBrasilAPI:mainfrom
mau0414:main

Conversation

@lucaspquadros
Copy link
Copy Markdown

Issue Relacionada

Closes #418 - Lugares sem CEP

Descrição

A partir da biblioteca "open-location-code", foi implementado uma solução que recebe como Input um Plus Code (simples código alfanumérico baseado em latitude e longitude para identificação exata de um local) e retorna, através da API Open Street Map, a rua, o bairro, a cidade, o país e o estado do local.
Para testar, basta obter um Plus Code do local desejado pelo Google Maps e verificar a saída gerada pela aplicação.

Exemplo de entrada:
entrada

Exemplo de saída:
saida

Base do funcionamento:
funcionamento

@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 10:26am

@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

@LorhanSohaky
Copy link
Copy Markdown
Member

@mau0414 , pode resolver os conflitos pff?

Copy link
Copy Markdown
Member

@LorhanSohaky LorhanSohaky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muito obrigado pela contribuição. Além desses detalhes, precisamos que você adicione casos de testes

Comment thread package.json
"apollo-server-micro": "2.24.0",
"axios": "0.21.1",
"bluebird": "3.7.2",
"browserslist": "^4.22.1",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pelo que vi essa dependência não é utilizada. Poderia remover?

Comment thread package.json
"next": "10.2.0",
"next-connect": "0.9.1",
"next-sitemap": "1.6.168",
"open-location-code": "^1.0.3",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aqui trabalhamos com versões pinadas, então pff mudar para o sugerido e refazer npm install

Suggested change
"open-location-code": "^1.0.3",
"open-location-code": "1.0.3",

Comment on lines +14 to +20
throw new InternalError({
status: 400,
message: `Plus Code inválido`,
name: 'PLUS_CODE_ERROR',
type: 'PLUS_CODE_ERROR',
});
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seria interessante diferenciar erros internos de quando o pluscode for inválido

Comment on lines +38 to +47
"400": {
"description": "Todos os serviços de CEP retornaram erro.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/location"
}
}
}
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Atualizar documentação com os erros corretos

Comment on lines +6 to +7
url: `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}&zoom=16`,
method: 'get',
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

recentemente tivemos problema com essa API. Favor incluir o user-agent igual seguindo o que há na v2 da rota de cep

https://operations.osmfoundation.org/policies/nominatim/

Copy link
Copy Markdown
Collaborator

@RodriAndreotti RodriAndreotti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obrigado pela contribuição!

O PR ficou muito legal, só deixei alguns comentários complementando os do @LorhanSohaky.

};


export default app().get(action);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conhecendo a api do open street maps de experiências passadas, e sabendo que essa informação não deve mudar com muita frequência eu recomendaria usar um cache mais agressivo que o padrão do projeto, assim não corremos o risco de blocks.. .rs

Suggested change
export default app().get(action);
export default app( { cache: 600000 } ).get(action);

@LorhanSohaky LorhanSohaky mentioned this pull request Mar 21, 2025
@lucianopf
Copy link
Copy Markdown
Member

Olá @lucaspquadros, Plus Codes é uma ideia interessante! Mas há problemas antes do merge.

Bloqueadores:

1. Nominatim (OpenStreetMap) requer User-Agent e tem limite de taxa

url: `https://nominatim.openstreetmap.org/reverse?...`

Os Termos de Uso do Nominatim exigem:

  • Máximo de 1 requisição por segundo
  • Header User-Agent identificando a aplicação
  • Proibição de uso massivo

Em produção, sem cache adequado e sem User-Agent, isso viola os ToS e pode resultar em bloqueio. Adicione pelo menos o header User-Agent.

2. URL sem versão

/api/pluscode/[pluscode].js  ❌
/api/pluscode/v1/[pluscode].js  ✅

Todos os endpoints da BrasilAPI usam versionamento na URL.

3. Todos os erros são tratados como InternalError

throw new InternalError({ status: 400, message: 'Plus Code inválido' });

InternalError é status 500. Um Plus Code inválido deveria lançar BadRequestError (400). Além disso, o campo status: 400 não é aceito pelo construtor de InternalError — o status HTTP é definido pela classe.

4. Ausência de testes

Nenhum arquivo de teste foi incluído no PR.

Outros:

  • import app from '@/app';; — duplo ponto-e-vírgula
  • response.json(data) sem return no handler — adicione return response.status(200).json(data)
  • Modificação em pages/sitemap.xml/index.jsx não parece relacionada ao Plus Code

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.

Sugestão: Lugares sem CEP

5 participants