From 5e3b6ae753388744ded023ee61cc99db26d8d47c Mon Sep 17 00:00:00 2001 From: Moran Date: Sat, 9 May 2026 17:16:41 -0300 Subject: [PATCH] =?UTF-8?q?Fix/=20adicionado=20camada=20de=20verifica?= =?UTF-8?q?=C3=A7=C3=A3o=20para=20garantir=20que=20todas=20as=20cidades=20?= =?UTF-8?q?que=20possuem=20poligono=20na=20api=20do=20ibge=20recebam=20o?= =?UTF-8?q?=20poligono=20atualizado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/scripts/update_polygons.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/utils/scripts/update_polygons.ts b/src/utils/scripts/update_polygons.ts index a427dbe5..ecbc1b1c 100644 --- a/src/utils/scripts/update_polygons.ts +++ b/src/utils/scripts/update_polygons.ts @@ -195,6 +195,33 @@ async function main(): Promise { ) await Promise.all(tarefas) + + // Verificação: buscar cidades que ainda ficaram sem polígono + const pendentesResult = await client.query( + `SELECT c.id, c.nome, ST_AsBinary(c.poligono) AS pol_wkb + FROM public.cidades c + JOIN public.estados e ON c.estado_id = e.id + WHERE e.pais_id = 76 + AND c.nome != 'Não Informado' + AND c.poligono IS NULL;` + ) + const pendentes = pendentesResult.rows + + if (pendentes.length > 0) { + const RETRY_CONCURRENCY = 2 + const RETRY_DELAY_MS = 500 + const retryLimit = pLimit(RETRY_CONCURRENCY) + + const retryTarefas = pendentes.map((c: Cidade) => + retryLimit(async () => { + const res = await processarCidade(client, municipios, c) + await delay(RETRY_DELAY_MS) + return res + }) + ) + + await Promise.all(retryTarefas) + } } finally { await client.end() }