public async Task <SuneduTitulo> Obtener(string dni)
        {
            var entidad = default(SuneduTitulo);

            var sql = "SELECT Dni, Datos, Creado, Actualizado FROM  SuneduTitulo WHERE Dni = @dni";

            using (var conexion = new SqlConnection(_configuracion.CadenaConexion))
            {
                using var comando = new SqlCommand(sql, conexion);
                comando.Parameters.AddWithValue("@dni", dni);

                conexion.Open();
                using var reader = await comando.ExecuteReaderAsync(System.Data.CommandBehavior.CloseConnection);

                while (reader.Read())
                {
                    entidad = new SuneduTitulo()
                    {
                        Dni         = reader.GetString(reader.GetOrdinal("Dni")),
                        Datos       = reader.GetString(reader.GetOrdinal("Datos")),
                        Creado      = reader.GetDateTime(reader.GetOrdinal("Creado")),
                        Actualizado = reader.GetDateTime(reader.GetOrdinal("Actualizado"))
                    };
                }
            }



            return(entidad);
        }
        public async Task Insertar(SuneduTitulo entidad)
        {
            var sql = "INSERT INTO SuneduTitulo(Dni, Datos, Creado, Actualizado) VALUES(@dni, @datos, @creado, @actualizado) ";

            using var conexion = new SqlConnection(_configuracion.CadenaConexion);
            using var comando  = new SqlCommand(sql, conexion);
            comando.Parameters.AddWithValue("@datos", entidad.Datos);
            comando.Parameters.AddWithValue("@creado", entidad.Creado);
            comando.Parameters.AddWithValue("@actualizado", entidad.Actualizado);
            comando.Parameters.AddWithValue("@dni", entidad.Dni);

            conexion.Open();

            await comando.ExecuteNonQueryAsync();
        }
        public async Task Actualizar(SuneduTitulo entidad)
        {
            var sql = "UPDATE SuneduTitulo SET Datos = @datos, Creado = @creado, Actualizado = @actualizado WHERE Dni = @dni";

            using var conexion = new SqlConnection(_configuracion.CadenaConexion);
            using var comando  = new SqlCommand(sql, conexion);
            comando.Parameters.AddWithValue("@datos", entidad.Datos);
            comando.Parameters.AddWithValue("@creado", entidad.Creado);
            comando.Parameters.AddWithValue("@actualizado", entidad.Actualizado);
            comando.Parameters.AddWithValue("@dni", entidad.Dni);

            conexion.Open();

            await comando.ExecuteNonQueryAsync();
        }
        public async Task <OperacionDto <List <TituloSuneduDto> > > ListarTitulos(PeticionTituloSuneduDto peticion)
        {
            var resultados = await ObtenerDeCache(peticion.Dni);

            bool fueDeCache = true;

            if (string.IsNullOrWhiteSpace(resultados))
            {
                resultados = ObtenerResultado(peticion);
                fueDeCache = false;
            }


            if (string.IsNullOrWhiteSpace(resultados))
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.NoExiste, "No se encontró información"));
            }

            if (!string.IsNullOrWhiteSpace(resultados) && resultados.ToLower().Contains("captcha es incorrecto".ToLower()))
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.CaptchaIncorrecto, "No se puede acceder a la info"));
            }

            var datoGuardar = new StringBuilder(resultados);


            resultados = resultados.Replace("\t", "");
            resultados = resultados.Replace("<b>", "");
            resultados = resultados.Replace(@"\u00d1", "Ñ");
            resultados = resultados.Replace(@"\u00c1", "Á");
            resultados = resultados.Replace(@"\u00c9", "É");
            resultados = resultados.Replace(@"\u00cd", "Í");
            resultados = resultados.Replace(@"\u00d3", "Ó");
            resultados = resultados.Replace(@"\u00da", "Ú");

            resultados = resultados.Substring(1, resultados.Length - 2).Replace("\\", "");


            var infoScraper = JsonConvert.DeserializeObject <List <TituloScraperDto> >(resultados);

            if (infoScraper == null)
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.NoExiste, "No se encontró información"));
            }

            if (!fueDeCache)
            {
                var entidad = await _suneduTituloDao.Obtener(peticion.Dni);

                if (entidad == null)
                {
                    entidad = new SuneduTitulo()
                    {
                        Dni   = peticion.Dni,
                        Datos = datoGuardar.ToString()
                    };
                    await _suneduTituloDao.Insertar(entidad);
                }
                else
                {
                    entidad.Datos       = datoGuardar.ToString();
                    entidad.Actualizado = DateTime.UtcNow;
                    await _suneduTituloDao.Actualizar(entidad);
                }
            }


            return(new OperacionDto <List <TituloSuneduDto> >(infoScraper.Select(e => new TituloSuneduDto()
            {
                FechaDiploma = e.DiplFec,
                Institucion = e.Univ,
                NombreCompleto = e.Nombre,
                Titulo = e.TituloRev
            }).ToList()));
        }