Test Docker
This commit is contained in:
		
							
								
								
									
										78
									
								
								reconcile_ids.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								reconcile_ids.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| // reconcile_ids.js | ||||
| const fs = require('fs'); | ||||
| const path = require('path'); | ||||
| const http = require('http'); | ||||
|  | ||||
| // --- CONFIGURACIÓN --- | ||||
| const API_URL = 'http://localhost:5217/api/catalogos/municipios'; // ¡Asegúrate que tu API esté corriendo en este puerto! | ||||
| const GEOJSON_PATH = path.join(__dirname, 'Elecciones-Web', 'frontend', 'public', 'buenos-aires-municipios.geojson'); | ||||
| const OUTPUT_PATH = path.join(__dirname, 'Elecciones-Web', 'frontend', 'public', 'municipioIdMap.json'); | ||||
|  | ||||
| const normalizeString = (str) => { | ||||
|     if (!str) return ''; | ||||
|     return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); | ||||
| }; | ||||
|  | ||||
| async function reconcile() { | ||||
|     console.log('Iniciando el script de reconciliación de IDs...'); | ||||
|  | ||||
|     try { | ||||
|         const apiData = await new Promise((resolve, reject) => { | ||||
|             http.get(API_URL, res => { | ||||
|                 const { statusCode } = res; | ||||
|                 if (statusCode !== 200) { | ||||
|                     reject(new Error(`La petición a la API falló con el código de estado: ${statusCode}`)); | ||||
|                     res.resume(); | ||||
|                     return; | ||||
|                 } | ||||
|                 let data = ''; | ||||
|                 res.on('data', chunk => data += chunk); | ||||
|                 res.on('end', () => resolve(JSON.parse(data))); | ||||
|             }).on('error', reject); | ||||
|         }); | ||||
|         console.log(`Se obtuvieron ${apiData.length} municipios desde la API.`); | ||||
|  | ||||
|         const apiNameMap = new Map(apiData.map(m => [normalizeString(m.nombre), m.id])); | ||||
|  | ||||
|         const geoJsonRaw = fs.readFileSync(GEOJSON_PATH, 'utf8'); | ||||
|         const geoJsonData = JSON.parse(geoJsonRaw); | ||||
|         console.log(`Se leyeron ${geoJsonData.features.length} features desde el GeoJSON.`); | ||||
|  | ||||
|         const finalIdMap = {}; | ||||
|         let matches = 0; | ||||
|         const notFound = []; | ||||
|  | ||||
|         // --- CAMBIO CLAVE: YA NO NECESITAMOS ALIAS MANUALES --- | ||||
|  | ||||
|         for (const feature of geoJsonData.features) { | ||||
|             const geoJsonId = feature.properties.cca; | ||||
|             const nombreGeoJson = normalizeString(feature.properties.nam); | ||||
|  | ||||
|             if (apiNameMap.has(nombreGeoJson)) { | ||||
|                 const apiId = apiNameMap.get(nombreGeoJson); | ||||
|                 finalIdMap[geoJsonId] = apiId; | ||||
|                 matches++; | ||||
|             } else { | ||||
|                 notFound.push(feature.properties.nam); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         console.log(`\n--- RESULTADOS ---`); | ||||
|         console.log(`Coincidencias encontradas: ${matches} de ${geoJsonData.features.length}`); | ||||
|         if (notFound.length > 0) { | ||||
|             console.warn(`\nNo se encontró coincidencia para los siguientes ${notFound.length} municipios del GeoJSON:`); | ||||
|             console.warn(notFound.join(', ')); | ||||
|         } | ||||
|  | ||||
|         fs.writeFileSync(OUTPUT_PATH, JSON.stringify(finalIdMap, null, 2)); | ||||
|         console.log(`\n¡Éxito! El mapa de IDs se ha guardado en: ${OUTPUT_PATH}`); | ||||
|  | ||||
|     } catch (error) { | ||||
|         console.error('\nOcurrió un error:', error.message); | ||||
|         if(error.code === 'ECONNREFUSED') { | ||||
|             console.error('Asegúrate de que tu servicio de API esté corriendo en la URL especificada.'); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| reconcile(); | ||||
		Reference in New Issue
	
	Block a user