feat: implementacao inicial do sistema LeadRadar
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import httpx
|
||||
from app.utils.sanitizers import sanitize_cep
|
||||
|
||||
class GeocodingService:
|
||||
|
||||
@staticmethod
|
||||
def get_location_by_cep(cep_str: str) -> dict:
|
||||
clean_cep = sanitize_cep(cep_str)
|
||||
if len(clean_cep) != 8:
|
||||
return {'error': 'CEP inválido. Deve conter exatamente 8 dígitos.'}
|
||||
|
||||
url = f"https://viacep.com.br/ws/{clean_cep}/json/"
|
||||
try:
|
||||
with httpx.Client(timeout=8.0) as client:
|
||||
response = client.get(url)
|
||||
if response.status_code != 200:
|
||||
return {'error': f'Falha ao consultar API ViaCEP (HTTP {response.status_code}).'}
|
||||
|
||||
data = response.json()
|
||||
if data.get('erro') is True or data.get('erro') == 'true':
|
||||
return {'error': 'CEP não encontrado na base do ViaCEP.'}
|
||||
|
||||
return {
|
||||
'cep': clean_cep,
|
||||
'logradouro': data.get('logradouro', ''),
|
||||
'bairro': data.get('bairro', ''),
|
||||
'cidade': data.get('localidade', ''),
|
||||
'uf': data.get('uf', ''),
|
||||
'ibge': data.get('ibge', ''),
|
||||
'formatted_cep': f"{clean_cep[:5]}-{clean_cep[5:]}"
|
||||
}
|
||||
except Exception as e:
|
||||
return {'error': f'Erro na comunicação com serviço de CEP: {str(e)}'}
|
||||
|
||||
@staticmethod
|
||||
def build_search_query(ramo: str, location_info: dict) -> str:
|
||||
bairro = location_info.get('bairro', '').strip()
|
||||
cidade = location_info.get('cidade', '').strip()
|
||||
uf = location_info.get('uf', '').strip()
|
||||
|
||||
if bairro:
|
||||
return f"{ramo.strip()} em {bairro}, {cidade} - {uf}"
|
||||
elif cidade and uf:
|
||||
return f"{ramo.strip()} em {cidade} - {uf}"
|
||||
return ramo.strip()
|
||||
Reference in New Issue
Block a user