public IActionResult BuscarContatos(
            [FromServices] ContatoRepository contatoRepository
            )
        {
            var usuarioToken = ProcToken.DeserializeUser((ClaimsIdentity)User.Identity);
            var contatos     = contatoRepository.GetAll <Contato>(usuarioToken.usuarioId);

            if (contatos.Count <= 0)
            {
                return(NoContent());
            }
            return(Ok(contatos));
        }
        public IActionResult EditarContato(
            [FromServices] ContatoRepository contatoRepository,
            [FromBody] Contato contato)
        {
            if (!ModelState.IsValid)
            {
                return(StatusCode(422));
            }

            var usuarioToken = ProcToken.DeserializeUser((ClaimsIdentity)User.Identity);

            contato.usuarioId = usuarioToken.usuarioId;
            contatoRepository.Update(contato);
            return(Ok());
        }
        public IActionResult DeletarContato(
            [FromServices] ContatoRepository contatoRepository,
            int id)
        {
            var usuarioToken = ProcToken.DeserializeUser((ClaimsIdentity)User.Identity);
            var contato      = new Contato();

            contato.contatoId = id;
            contato.usuarioId = usuarioToken.usuarioId;
            contato           = contatoRepository.Get <Contato>(contato);
            if (contato != null)
            {
                contatoRepository.Delete(contato);
            }
            return(Ok());
        }
        public IActionResult EntrarUsuario(
            [FromServices] UsuarioRepository usuarioRepository,
            [FromServices] SigningConfigurations signingConfigurations,
            [FromServices] TokenConfigurations tokenConfigurations,
            [FromForm] Login login)
        {
            var token = ProcToken.Generate(
                usuarioRepository,
                signingConfigurations,
                tokenConfigurations,
                login);

            if (token == null)
            {
                return(StatusCode(401));
            }
            return(Ok(token));
        }
        public IActionResult BuscarContatosFiltro(
            [FromServices] ContatoRepository contatoRepository,
            string filtro
            )
        {
            var usuarioToken = ProcToken.DeserializeUser((ClaimsIdentity)User.Identity);
            var contatos     = contatoRepository.GetAll <Contato>(usuarioToken.usuarioId);

            if (contatos.Count <= 0)
            {
                return(NoContent());
            }
            var retorno = contatos.FindAll(c =>
            {
                return(c.contatoNome.ToUpper().Contains(filtro.ToUpper()) || (c.telefones.FindAll(t => t.telefoneNumero.Contains(filtro) || t.tipo.ToUpper().Contains(filtro.ToUpper())).Count > 0));
            });

            if (retorno.Count <= 0)
            {
                return(NoContent());
            }
            return(Ok(retorno));
        }