using Dapper; using Npgsql; using OpenCand.Core.Models; namespace OpenCand.Repository { public class CandidatoRepository : BaseRepository { public CandidatoRepository(IConfiguration configuration) : base(configuration) { } public async Task> SearchCandidatosAsync(string query) { using (var connection = new NpgsqlConnection(ConnectionString)) { return (await connection.QueryAsync(@" SELECT idcandidato, cpf, nome, datanascimento, email, sexo, estadocivil, escolaridade, ocupacao FROM candidato WHERE nome ILIKE '%' || @query || '%' OR cpf ILIKE '%' || @query || '%' OR email ILIKE '%' || @query || '%' LIMIT 10;", new { query })).AsList(); } } public async Task GetCandidatoAsync(Guid idcandidato) { using (var connection = new NpgsqlConnection(ConnectionString)) { return await connection.QueryFirstOrDefaultAsync(@" SELECT * FROM candidato WHERE idcandidato = @idcandidato;", new { idcandidato }); } } public async Task GetCandidatoCpfAsync(Guid idcandidato) { using (var connection = new NpgsqlConnection(ConnectionString)) { return await connection.QueryFirstOrDefaultAsync(@" SELECT cpf FROM candidato WHERE idcandidato = @idcandidato;", new { idcandidato }); } } public async Task?> GetCandidatoMappingById(Guid idcandidato) { using (var connection = new NpgsqlConnection(ConnectionString)) { var query = @" SELECT * FROM candidato_mapping WHERE idcandidato = @idcandidato"; return (await connection.QueryAsync(query, new { idcandidato })).AsList(); } } public async Task GetPartidoBySigla(string sigla) { using (var connection = new NpgsqlConnection(ConnectionString)) { var query = @" SELECT * FROM partido WHERE sigla = @sigla"; return await connection.QueryFirstOrDefaultAsync(query, new { sigla }); } } public async Task?> GetCandidatoRedeSocialById(Guid idcandidato) { using (var connection = new NpgsqlConnection(ConnectionString)) { var query = @" SELECT * FROM rede_social WHERE idcandidato = @idcandidato"; return (await connection.QueryAsync(query, new { idcandidato })).AsList(); } } } }