feat: selecao individual de leads antes de salvar, dark mode global e extracao 100% real do Google Maps

This commit is contained in:
2026-08-26 17:33:07 -03:00
parent 934046f2cc
commit 4c8f1f8299
8 changed files with 314 additions and 151 deletions
+26 -4
View File
@@ -50,8 +50,11 @@ class APIClient:
except Exception as e:
return False, f"Erro ao conectar com API: {str(e)}"
def search_maps(self, cep: str, ramo: str, max_results: int = 15) -> tuple[bool, dict]:
url = f"{self.base_url}/api/v1/leads/search-maps"
def scrape_preview(self, cep: str, ramo: str, max_results: int = 15) -> tuple[bool, dict]:
"""
Solicita a varredura no Maps sem salvar no banco de dados ainda.
"""
url = f"{self.base_url}/api/v1/leads/scrape-preview"
try:
with httpx.Client(timeout=60.0) as client:
res = client.post(url, headers=self._get_headers(), json={
@@ -62,9 +65,28 @@ class APIClient:
data = res.json()
if res.status_code == 200:
return True, data
return False, {'error': data.get('error', 'Erro durante varredura no Google Maps.')}
return False, {'error': data.get('error', 'Erro durante prospecção no Google Maps.')}
except Exception as e:
return False, {'error': f"Erro ao processar busca: {str(e)}"}
return False, {'error': f"Erro ao conectar com API: {str(e)}"}
def import_selected_leads(self, cep: str, ramo: str, selected_leads: list) -> tuple[bool, str]:
"""
Envia a lista de leads selecionados para serem salvos no banco.
"""
url = f"{self.base_url}/api/v1/leads/import-selected"
try:
with httpx.Client(timeout=30.0) as client:
res = client.post(url, headers=self._get_headers(), json={
'cep': cep,
'ramo': ramo,
'selected_leads': selected_leads
})
data = res.json()
if res.status_code == 200:
return True, data.get('message', 'Leads importados com sucesso!')
return False, data.get('error', 'Falha ao importar leads.')
except Exception as e:
return False, f"Erro ao conectar com API: {str(e)}"
def get_leads(self, status_funil: str = None, cidade: str = None, ramo: str = None, search: str = None) -> list:
url = f"{self.base_url}/api/v1/leads"