add apelido
This commit is contained in:
parent
a3d67198af
commit
03b1f4f1d1
@ -15,11 +15,21 @@ namespace OpenCand.Repository
|
|||||||
using (var connection = new NpgsqlConnection(ConnectionString))
|
using (var connection = new NpgsqlConnection(ConnectionString))
|
||||||
{
|
{
|
||||||
return (await connection.QueryAsync<Candidato>(@"
|
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
|
FROM candidato
|
||||||
WHERE nome ILIKE '%' || @query || '%' OR
|
WHERE nome ILIKE '%' || @query || '%' OR
|
||||||
cpf ILIKE '%' || @query || '%' OR
|
cpf ILIKE '%' || @query || '%'
|
||||||
email ILIKE '%' || @query || '%'
|
ORDER BY name_rank,
|
||||||
|
length(nome) ASC
|
||||||
LIMIT 10;",
|
LIMIT 10;",
|
||||||
new { query })).AsList();
|
new { query })).AsList();
|
||||||
}
|
}
|
||||||
|
33
OpenCand.API/jpg-normalize.sh
Normal file
33
OpenCand.API/jpg-normalize.sh
Normal 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 there’s 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."
|
@ -12,6 +12,8 @@ namespace OpenCand.Core.Models
|
|||||||
|
|
||||||
public string Nome { get; set; }
|
public string Nome { get; set; }
|
||||||
|
|
||||||
|
public string Apelido { get; set; }
|
||||||
|
|
||||||
public DateTime? DataNascimento { get; set; }
|
public DateTime? DataNascimento { get; set; }
|
||||||
|
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
@ -35,6 +37,7 @@ namespace OpenCand.Core.Models
|
|||||||
public Guid IdCandidato { get; set; }
|
public Guid IdCandidato { get; set; }
|
||||||
public string Cpf { get; set; }
|
public string Cpf { get; set; }
|
||||||
public string Nome { get; set; }
|
public string Nome { get; set; }
|
||||||
|
public string Apelido { get; set; }
|
||||||
public string SqCandidato { get; set; }
|
public string SqCandidato { get; set; }
|
||||||
public int Ano { get; set; }
|
public int Ano { get; set; }
|
||||||
public string TipoEleicao { get; set; }
|
public string TipoEleicao { get; set; }
|
||||||
|
@ -29,6 +29,9 @@ namespace OpenCand.Parser.Models
|
|||||||
[Name("NM_CANDIDATO")]
|
[Name("NM_CANDIDATO")]
|
||||||
public string NomeCandidato { get; set; }
|
public string NomeCandidato { get; set; }
|
||||||
|
|
||||||
|
[Name("NM_URNA_CANDIDATO")]
|
||||||
|
public string Apelido { get; set; }
|
||||||
|
|
||||||
[Name("NR_CPF_CANDIDATO")]
|
[Name("NR_CPF_CANDIDATO")]
|
||||||
public string CPFCandidato { get; set; }
|
public string CPFCandidato { get; set; }
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ namespace OpenCand.Parser.Services
|
|||||||
Cpf = record.CPFCandidato,
|
Cpf = record.CPFCandidato,
|
||||||
SqCandidato = record.SequencialCandidato,
|
SqCandidato = record.SequencialCandidato,
|
||||||
Nome = record.NomeCandidato,
|
Nome = record.NomeCandidato,
|
||||||
|
Apelido = record.Apelido,
|
||||||
Email = record.Email.Contains("@") ? record.Email : null,
|
Email = record.Email.Contains("@") ? record.Email : null,
|
||||||
Sexo = record.Genero,
|
Sexo = record.Genero,
|
||||||
EstadoCivil = record.EstadoCivil,
|
EstadoCivil = record.EstadoCivil,
|
||||||
@ -103,6 +104,7 @@ namespace OpenCand.Parser.Services
|
|||||||
{
|
{
|
||||||
Cpf = record.CPFCandidato,
|
Cpf = record.CPFCandidato,
|
||||||
Nome = record.NomeCandidato,
|
Nome = record.NomeCandidato,
|
||||||
|
Apelido = record.Apelido,
|
||||||
SqCandidato = record.SequencialCandidato,
|
SqCandidato = record.SequencialCandidato,
|
||||||
Ano = record.AnoEleicao,
|
Ano = record.AnoEleicao,
|
||||||
TipoEleicao = record.TipoAbrangencia,
|
TipoEleicao = record.TipoAbrangencia,
|
||||||
|
@ -24,9 +24,6 @@ namespace OpenCand
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger.LogInformation("Initializing database");
|
|
||||||
// make a test connection to the database
|
|
||||||
|
|
||||||
logger.LogInformation("Starting data parsing");
|
logger.LogInformation("Starting data parsing");
|
||||||
var parserManager = services.GetRequiredService<ParserManager>();
|
var parserManager = services.GetRequiredService<ParserManager>();
|
||||||
await parserManager.ParseFullDataAsync();
|
await parserManager.ParseFullDataAsync();
|
||||||
|
@ -16,8 +16,8 @@ namespace OpenCand.Repository
|
|||||||
using (var connection = new NpgsqlConnection(ConnectionString))
|
using (var connection = new NpgsqlConnection(ConnectionString))
|
||||||
{
|
{
|
||||||
await connection.ExecuteAsync(@"
|
await connection.ExecuteAsync(@"
|
||||||
INSERT INTO candidato (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, @datanascimento, @email, @sexo, @estadocivil, @escolaridade, @ocupacao)
|
VALUES (@idcandidato, @cpf, @nome, @apelido, @datanascimento, @email, @sexo, @estadocivil, @escolaridade, @ocupacao)
|
||||||
ON CONFLICT (idcandidato) DO UPDATE SET
|
ON CONFLICT (idcandidato) DO UPDATE SET
|
||||||
cpf = EXCLUDED.cpf,
|
cpf = EXCLUDED.cpf,
|
||||||
nome = EXCLUDED.nome,
|
nome = EXCLUDED.nome,
|
||||||
@ -26,12 +26,14 @@ namespace OpenCand.Repository
|
|||||||
sexo = EXCLUDED.sexo,
|
sexo = EXCLUDED.sexo,
|
||||||
estadocivil = EXCLUDED.estadocivil,
|
estadocivil = EXCLUDED.estadocivil,
|
||||||
escolaridade = EXCLUDED.escolaridade,
|
escolaridade = EXCLUDED.escolaridade,
|
||||||
ocupacao = EXCLUDED.ocupacao;",
|
ocupacao = EXCLUDED.ocupacao,
|
||||||
|
apelido = EXCLUDED.apelido;",
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
idcandidato = candidato.IdCandidato,
|
idcandidato = candidato.IdCandidato,
|
||||||
cpf = candidato.Cpf,
|
cpf = candidato.Cpf,
|
||||||
nome = candidato.Nome,
|
nome = candidato.Nome,
|
||||||
|
apelido = candidato.Apelido,
|
||||||
datanascimento = candidato.DataNascimento,
|
datanascimento = candidato.DataNascimento,
|
||||||
email = candidato.Email,
|
email = candidato.Email,
|
||||||
sexo = candidato.Sexo,
|
sexo = candidato.Sexo,
|
||||||
@ -47,13 +49,14 @@ namespace OpenCand.Repository
|
|||||||
using (var connection = new NpgsqlConnection(ConnectionString))
|
using (var connection = new NpgsqlConnection(ConnectionString))
|
||||||
{
|
{
|
||||||
await connection.ExecuteAsync(@"
|
await connection.ExecuteAsync(@"
|
||||||
INSERT INTO candidato_mapping (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, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @sgpartido, @resultado);",
|
VALUES (@idcandidato, @cpf, @nome, @apelido, @sqcandidato, @ano, @tipoeleicao, @siglauf, @nomeue, @cargo, @nrcandidato, @sgpartido, @resultado);",
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
idcandidato = candidatoMapping.IdCandidato,
|
idcandidato = candidatoMapping.IdCandidato,
|
||||||
cpf = candidatoMapping.Cpf,
|
cpf = candidatoMapping.Cpf,
|
||||||
nome = candidatoMapping.Nome,
|
nome = candidatoMapping.Nome,
|
||||||
|
apelido = candidatoMapping.Apelido,
|
||||||
sqcandidato = candidatoMapping.SqCandidato,
|
sqcandidato = candidatoMapping.SqCandidato,
|
||||||
ano = candidatoMapping.Ano,
|
ano = candidatoMapping.Ano,
|
||||||
tipoeleicao = candidatoMapping.TipoEleicao,
|
tipoeleicao = candidatoMapping.TipoEleicao,
|
||||||
|
@ -8,6 +8,7 @@ CREATE TABLE candidato (
|
|||||||
idcandidato UUID NOT NULL PRIMARY KEY,
|
idcandidato UUID NOT NULL PRIMARY KEY,
|
||||||
cpf VARCHAR(11),
|
cpf VARCHAR(11),
|
||||||
nome VARCHAR(255) NOT NULL,
|
nome VARCHAR(255) NOT NULL,
|
||||||
|
apelido VARCHAR(255),
|
||||||
datanascimento TIMESTAMPTZ,
|
datanascimento TIMESTAMPTZ,
|
||||||
email TEXT,
|
email TEXT,
|
||||||
sexo CHAR(15),
|
sexo CHAR(15),
|
||||||
@ -16,12 +17,14 @@ CREATE TABLE candidato (
|
|||||||
ocupacao VARCHAR(150)
|
ocupacao VARCHAR(150)
|
||||||
);
|
);
|
||||||
CREATE INDEX idx_candidato_nome ON candidato (nome);
|
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)
|
-- Each candidato (idcandidato, cpf, nome) will be mapped to a (sqcandidato, ano, tipo_eleicao, sg_uf, cargo, resultado)
|
||||||
CREATE TABLE candidato_mapping (
|
CREATE TABLE candidato_mapping (
|
||||||
idcandidato UUID NOT NULL,
|
idcandidato UUID NOT NULL,
|
||||||
cpf VARCHAR(11),
|
cpf VARCHAR(11),
|
||||||
nome VARCHAR(255) NOT NULL,
|
nome VARCHAR(255) NOT NULL,
|
||||||
|
apelido VARCHAR(255),
|
||||||
sqcandidato TEXT,
|
sqcandidato TEXT,
|
||||||
ano INT NOT NULL,
|
ano INT NOT NULL,
|
||||||
tipoeleicao VARCHAR(50),
|
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_cpf ON candidato_mapping (cpf);
|
||||||
CREATE INDEX idx_candidato_mapping_nome ON candidato_mapping (nome);
|
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_ano ON candidato_mapping (ano);
|
||||||
CREATE INDEX idx_candidato_mapping_sqcandidato ON candidato_mapping (sqcandidato);
|
CREATE INDEX idx_candidato_mapping_sqcandidato ON candidato_mapping (sqcandidato);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user