add apelido

This commit is contained in:
Jose Henrique 2025-06-02 16:47:24 -03:00
parent a3d67198af
commit 03b1f4f1d1
8 changed files with 66 additions and 11 deletions

View File

@ -15,11 +15,21 @@ namespace OpenCand.Repository
using (var connection = new NpgsqlConnection(ConnectionString))
{
return (await connection.QueryAsync<Candidato>(@"
SELECT idcandidato, cpf, nome, datanascimento, email, sexo, estadocivil, escolaridade, ocupacao
SELECT *
CASE
WHEN lower(nome) = lower(@query) THEN 0 -- Exact match (case-insensitive)
WHEN lower(nome) LIKE lower(@query) || '%' THEN 1 -- Starts with match (case-insensitive)
WHEN lower(nome) LIKE '%' || lower(@query) THEN 2 -- Contains anywhere match (case-insensitive)
WHEN cpf = @query THEN 0 -- Exact match for CPF
WHEN cpf LIKE @query || '%' THEN 1 -- Starts with match for CPF
WHEN cpf LIKE '%' || @query THEN 2 -- Contains anywhere match for CPF
ELSE 3
END AS name_rank
FROM candidato
WHERE nome ILIKE '%' || @query || '%' OR
cpf ILIKE '%' || @query || '%' OR
email ILIKE '%' || @query || '%'
cpf ILIKE '%' || @query || '%'
ORDER BY name_rank,
length(nome) ASC
LIMIT 10;",
new { query })).AsList();
}

View File

@ -0,0 +1,33 @@
#!/bin/bash
cd ./fotos_cand
COUNT=0
shopt -s nocaseglob
# Loop through all folders
for dir in */; do
# Change into the directory
cd "$dir" || continue
# Loop over every “.jpeg” (or “.JPEG”):
for f in *.jpeg; do
# “${f%.[jJ][pP][eE][gG]}” strips off the .jpeg/.JPEG suffix
base="${f%.[jJ][pP][eE][gG]}"
newfile="${base}.jpg"
# If theres already a .jpg with the same “base,” decide what to do:
if [ -e "$newfile" ]; then
echo "Skipping $f$newfile (target exists)"
# you could `rm "$f"` or move it to a backup folder here if you prefer
else
mv -v "$f" "$newfile"
fi
done
# Change back to the parent directory
cd ..
done
shopt -u nocaseglob
# Print a message indicating completion
echo "Normalization complete. Processed $COUNT files."

View File

@ -12,6 +12,8 @@ namespace OpenCand.Core.Models
public string Nome { get; set; }
public string Apelido { get; set; }
public DateTime? DataNascimento { get; set; }
public string Email { get; set; }
@ -35,6 +37,7 @@ namespace OpenCand.Core.Models
public Guid IdCandidato { get; set; }
public string Cpf { get; set; }
public string Nome { get; set; }
public string Apelido { get; set; }
public string SqCandidato { get; set; }
public int Ano { get; set; }
public string TipoEleicao { get; set; }

View File

@ -29,6 +29,9 @@ namespace OpenCand.Parser.Models
[Name("NM_CANDIDATO")]
public string NomeCandidato { get; set; }
[Name("NM_URNA_CANDIDATO")]
public string Apelido { get; set; }
[Name("NR_CPF_CANDIDATO")]
public string CPFCandidato { get; set; }

View File

@ -92,6 +92,7 @@ namespace OpenCand.Parser.Services
Cpf = record.CPFCandidato,
SqCandidato = record.SequencialCandidato,
Nome = record.NomeCandidato,
Apelido = record.Apelido,
Email = record.Email.Contains("@") ? record.Email : null,
Sexo = record.Genero,
EstadoCivil = record.EstadoCivil,
@ -103,6 +104,7 @@ namespace OpenCand.Parser.Services
{
Cpf = record.CPFCandidato,
Nome = record.NomeCandidato,
Apelido = record.Apelido,
SqCandidato = record.SequencialCandidato,
Ano = record.AnoEleicao,
TipoEleicao = record.TipoAbrangencia,

View File

@ -24,9 +24,6 @@ namespace OpenCand
try
{
logger.LogInformation("Initializing database");
// make a test connection to the database
logger.LogInformation("Starting data parsing");
var parserManager = services.GetRequiredService<ParserManager>();
await parserManager.ParseFullDataAsync();

View File

@ -16,8 +16,8 @@ namespace OpenCand.Repository
using (var connection = new NpgsqlConnection(ConnectionString))
{
await connection.ExecuteAsync(@"
INSERT INTO candidato (idcandidato, cpf, nome, datanascimento, email, sexo, estadocivil, escolaridade, ocupacao)
VALUES (@idcandidato, @cpf, @nome, @datanascimento, @email, @sexo, @estadocivil, @escolaridade, @ocupacao)
INSERT INTO candidato (idcandidato, cpf, nome, apelido, datanascimento, email, sexo, estadocivil, escolaridade, ocupacao)
VALUES (@idcandidato, @cpf, @nome, @apelido, @datanascimento, @email, @sexo, @estadocivil, @escolaridade, @ocupacao)
ON CONFLICT (idcandidato) DO UPDATE SET
cpf = EXCLUDED.cpf,
nome = EXCLUDED.nome,
@ -26,12 +26,14 @@ namespace OpenCand.Repository
sexo = EXCLUDED.sexo,
estadocivil = EXCLUDED.estadocivil,
escolaridade = EXCLUDED.escolaridade,
ocupacao = EXCLUDED.ocupacao;",
ocupacao = EXCLUDED.ocupacao,
apelido = EXCLUDED.apelido;",
new
{
idcandidato = candidato.IdCandidato,
cpf = candidato.Cpf,
nome = candidato.Nome,
apelido = candidato.Apelido,
datanascimento = candidato.DataNascimento,
email = candidato.Email,
sexo = candidato.Sexo,
@ -47,13 +49,14 @@ 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, sgpartido, resultado)
VALUES (@idcandidato, @cpf, @nome, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @sgpartido, @resultado);",
INSERT INTO candidato_mapping (idcandidato, cpf, nome, apelido, sqcandidato, ano, tipoeleicao, siglauf, nomeue, cargo, nrcandidato, sgpartido, resultado)
VALUES (@idcandidato, @cpf, @nome, @apelido, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @sgpartido, @resultado);",
new
{
idcandidato = candidatoMapping.IdCandidato,
cpf = candidatoMapping.Cpf,
nome = candidatoMapping.Nome,
apelido = candidatoMapping.Apelido,
sqcandidato = candidatoMapping.SqCandidato,
ano = candidatoMapping.Ano,
tipoeleicao = candidatoMapping.TipoEleicao,

View File

@ -8,6 +8,7 @@ CREATE TABLE candidato (
idcandidato UUID NOT NULL PRIMARY KEY,
cpf VARCHAR(11),
nome VARCHAR(255) NOT NULL,
apelido VARCHAR(255),
datanascimento TIMESTAMPTZ,
email TEXT,
sexo CHAR(15),
@ -16,12 +17,14 @@ CREATE TABLE candidato (
ocupacao VARCHAR(150)
);
CREATE INDEX idx_candidato_nome ON candidato (nome);
CREATE INDEX idx_candidato_apelido ON candidato (apelido);
-- Each candidato (idcandidato, cpf, nome) will be mapped to a (sqcandidato, ano, tipo_eleicao, sg_uf, cargo, resultado)
CREATE TABLE candidato_mapping (
idcandidato UUID NOT NULL,
cpf VARCHAR(11),
nome VARCHAR(255) NOT NULL,
apelido VARCHAR(255),
sqcandidato TEXT,
ano INT NOT NULL,
tipoeleicao VARCHAR(50),
@ -36,6 +39,7 @@ CREATE TABLE candidato_mapping (
);
CREATE INDEX idx_candidato_mapping_cpf ON candidato_mapping (cpf);
CREATE INDEX idx_candidato_mapping_nome ON candidato_mapping (nome);
CREATE INDEX idx_candidato_mapping_apelido ON candidato_mapping (apelido);
CREATE INDEX idx_candidato_mapping_ano ON candidato_mapping (ano);
CREATE INDEX idx_candidato_mapping_sqcandidato ON candidato_mapping (sqcandidato);