partido + melhorias
All checks were successful
API and ETL Build / build_etl (push) Successful in 17s
API and ETL Build / build_api (push) Successful in 9s

This commit is contained in:
2025-05-31 20:46:48 -03:00
parent 146495c07b
commit a3d67198af
14 changed files with 137 additions and 74 deletions

View File

@@ -47,8 +47,8 @@ namespace OpenCand.Repository
using (var connection = new NpgsqlConnection(ConnectionString))
{
await connection.ExecuteAsync(@"
INSERT INTO candidato_mapping (idcandidato, cpf, nome, sqcandidato, ano, tipoeleicao, siglauf, nomeue, cargo, nrcandidato, resultado)
VALUES (@idcandidato, @cpf, @nome, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @resultado);",
INSERT INTO candidato_mapping (idcandidato, cpf, nome, sqcandidato, ano, tipoeleicao, siglauf, nomeue, cargo, nrcandidato, sgpartido, resultado)
VALUES (@idcandidato, @cpf, @nome, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @sgpartido, @resultado);",
new
{
idcandidato = candidatoMapping.IdCandidato,
@@ -61,6 +61,7 @@ namespace OpenCand.Repository
nomeue = candidatoMapping.NomeUE,
nrcandidato = candidatoMapping.NrCandidato,
cargo = candidatoMapping.Cargo,
sgpartido = candidatoMapping.Partido?.Sigla,
resultado = candidatoMapping.Resultado
});
}
@@ -78,15 +79,15 @@ namespace OpenCand.Repository
}
}
public async Task<List<CandidatoMapping>?> GetCandidatoMappingByNome(string nome)
public async Task<List<CandidatoMapping>?> GetCandidatoMappingByNome(string nome, string sqcandidato, int ano, string siglauf, string nomeue, string nrcandidato)
{
using (var connection = new NpgsqlConnection(ConnectionString))
{
var query = @"
SELECT idcandidato, cpf, nome, sqcandidato, ano, tipoeleicao, siglauf, nomeue, cargo, nrcandidato, resultado
FROM candidato_mapping
WHERE nome = @nome";
return (await connection.QueryAsync<CandidatoMapping>(query, new { nome })).AsList();
WHERE nome = @nome AND sqcandidato = @sqcandidato AND ano = @ano AND siglauf = @siglauf AND nomeue = @nomeue AND nrcandidato = @nrcandidato";
return (await connection.QueryAsync<CandidatoMapping>(query, new { nome, sqcandidato, ano, siglauf, nomeue, nrcandidato })).AsList();
}
}

View File

@@ -0,0 +1,49 @@
using Dapper;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration;
using OpenCand.Core.Models;
using OpenCand.Repository;
namespace OpenCand.ETL.Repository
{
public class PartidoRepository : BaseRepository
{
// Memory cache for partido data
private readonly MemoryCache partidoCache = new MemoryCache(new MemoryCacheOptions());
public PartidoRepository(IConfiguration configuration) : base(configuration)
{
// Initialize the cache with a sliding expiration of 5 minutes
partidoCache = new MemoryCache(new MemoryCacheOptions
{
ExpirationScanFrequency = TimeSpan.FromMinutes(5)
});
}
public async Task AddPartidoAsync(Partido partido)
{
// Check if partido is already cached
if (partidoCache.TryGetValue(partido.Sigla, out Partido? cachedPartido))
{
// If partido is already cached, no need to insert again
return;
}
using (var connection = new Npgsql.NpgsqlConnection(ConnectionString))
{
await connection.ExecuteAsync(@"
INSERT INTO partido (sigla, nome, numero)
VALUES (@sigla, @nome, @numero)
ON CONFLICT DO NOTHING;",
new
{
sigla = partido.Sigla,
nome = partido.Nome,
numero = partido.Numero
});
partidoCache.Set(partido.Sigla, partido, TimeSpan.FromMinutes(5));
}
}
}
}