Preparación Legislativas Nacionales 2025

This commit is contained in:
2025-09-17 11:31:17 -03:00
parent 64dc7ef440
commit 3a8f64bf85
94 changed files with 2471 additions and 195 deletions

View File

@@ -215,6 +215,116 @@ using (var scope = app.Services.CreateScope())
Console.WriteLine("--> Seeded default configurations.");
}
// --- SEEDER FINAL Y AUTOSUFICIENTE: Resultados Nacionales de Simulación para todo el país ---
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<EleccionesDbContext>();
var logger = services.GetRequiredService<ILogger<Program>>();
const int eleccionNacionalId = 2;
if (!context.ResultadosVotos.Any(r => r.EleccionId == eleccionNacionalId))
{
logger.LogInformation("--> No se encontraron datos para la elección nacional ID {EleccionId}. Generando datos de simulación para TODO EL PAÍS...", eleccionNacionalId);
var eleccionNacional = await context.Elecciones.FindAsync(eleccionNacionalId) ?? new Eleccion { Id = eleccionNacionalId, Nombre = "Elecciones Nacionales 2025", Nivel = "Nacional", DistritoId = "00", Fecha = new DateOnly(2025, 10, 26) };
if (!context.Elecciones.Local.Any(e => e.Id == eleccionNacionalId)) context.Elecciones.Add(eleccionNacional);
var categoriaDiputadosNac = await context.CategoriasElectorales.FindAsync(2) ?? new CategoriaElectoral { Id = 2, Nombre = "DIPUTADOS NACIONALES", Orden = 3 };
if (!context.CategoriasElectorales.Local.Any(c => c.Id == 2)) context.CategoriasElectorales.Add(categoriaDiputadosNac);
await context.SaveChangesAsync();
var provinciasMaestras = new Dictionary<string, string>
{
{ "01", "CABA" }, { "02", "BUENOS AIRES" }, { "03", "CATAMARCA" }, { "04", "CORDOBA" },
{ "05", "CORRIENTES" },{ "06", "CHACO" }, { "07", "CHUBUT" }, { "08", "ENTRE RIOS" },
{ "09", "FORMOSA" }, { "10", "JUJUY" }, { "11", "LA PAMPA" }, { "12", "LA RIOJA" },
{ "13", "MENDOZA" }, { "14", "MISIONES" }, { "15", "NEUQUEN" }, { "16", "RIO NEGRO" },
{ "17", "SALTA" }, { "18", "SAN JUAN" }, { "19", "SAN LUIS" }, { "20", "SANTA CRUZ" },
{ "21", "SANTA FE" }, { "22", "SANTIAGO DEL ESTERO" }, { "23", "TIERRA DEL FUEGO" }, { "24", "TUCUMAN" }
};
foreach (var p in provinciasMaestras)
{
if (!await context.AmbitosGeograficos.AnyAsync(a => a.NivelId == 10 && a.DistritoId == p.Key))
{
context.AmbitosGeograficos.Add(new AmbitoGeografico { Nombre = p.Value, NivelId = 10, DistritoId = p.Key });
}
}
await context.SaveChangesAsync();
logger.LogInformation("--> Verificados/creados los 24 ámbitos geográficos de Nivel 10.");
// --- INICIO DE LA LÓGICA DE CREACIÓN DE MUNICIPIOS DE EJEMPLO ---
logger.LogInformation("--> Verificando existencia de municipios (Nivel 30) para cada provincia...");
var provinciasEnDb = await context.AmbitosGeograficos.AsNoTracking().Where(a => a.NivelId == 10).ToListAsync();
foreach (var provincia in provinciasEnDb)
{
bool existenMunicipios = await context.AmbitosGeograficos.AnyAsync(a => a.NivelId == 30 && a.DistritoId == provincia.DistritoId);
if (!existenMunicipios)
{
logger.LogWarning("--> No se encontraron municipios para {Provincia}. Creando 5 municipios de ejemplo...", provincia.Nombre);
for (int i = 1; i <= 5; i++)
{
context.AmbitosGeograficos.Add(new AmbitoGeografico
{
Nombre = $"{provincia.Nombre} - Municipio de Ejemplo {i}",
NivelId = 30,
DistritoId = provincia.DistritoId
});
}
}
}
await context.SaveChangesAsync();
// --- FIN DE LA LÓGICA DE CREACIÓN DE MUNICIPIOS DE EJEMPLO ---
var todosLosPartidos = await context.AgrupacionesPoliticas.Take(5).ToListAsync();
if (!todosLosPartidos.Any()) {
logger.LogWarning("--> No hay agrupaciones políticas en la BD. No se pueden generar votos de simulación.");
return;
}
var nuevosResultados = new List<ResultadoVoto>();
var rand = new Random();
foreach (var provincia in provinciasEnDb)
{
var municipiosDeProvincia = await context.AmbitosGeograficos.AsNoTracking()
.Where(a => a.NivelId == 30 && a.DistritoId == provincia.DistritoId).ToListAsync();
if (!municipiosDeProvincia.Any()) continue;
logger.LogInformation("--> Generando votos para {Count} municipios en {Provincia}...", municipiosDeProvincia.Count, provincia.Nombre);
int partidoIndex = rand.Next(todosLosPartidos.Count);
foreach (var municipio in municipiosDeProvincia)
{
var partidoGanador = todosLosPartidos[partidoIndex % todosLosPartidos.Count];
partidoIndex++;
nuevosResultados.Add(new ResultadoVoto {
EleccionId = eleccionNacional.Id, AmbitoGeograficoId = municipio.Id, CategoriaId = categoriaDiputadosNac.Id,
AgrupacionPoliticaId = partidoGanador.Id, CantidadVotos = rand.Next(25000, 70000)
});
var otrosPartidos = todosLosPartidos.Where(p => p.Id != partidoGanador.Id).OrderBy(p => rand.Next()).Take(rand.Next(3, 6));
foreach (var competidor in otrosPartidos) {
nuevosResultados.Add(new ResultadoVoto {
EleccionId = eleccionNacional.Id, AmbitoGeograficoId = municipio.Id, CategoriaId = categoriaDiputadosNac.Id,
AgrupacionPoliticaId = competidor.Id, CantidadVotos = rand.Next(1000, 24000)
});
}
}
}
if (nuevosResultados.Any()) {
await context.ResultadosVotos.AddRangeAsync(nuevosResultados);
await context.SaveChangesAsync();
logger.LogInformation("--> Se generaron {Count} registros de votos de simulación para todo el país.", nuevosResultados.Count);
} else {
logger.LogWarning("--> No se encontraron municipios en la BD para generar votos de simulación.");
}
}
}
// Configurar el pipeline de peticiones HTTP.
// Añadimos el logging de peticiones de Serilog aquí.
app.UseSerilogRequestLogging();