private UsuarioViewModel VerificaLoginSenha(LoginMySql objeto)
        {
            try
            {
                UsuarioViewModel retorno = null;

                // efetuar login
                UsuarioMySql busca = _usuarioMySqlRepository.ObterUsuarioLogin(new UsuarioMySql
                {
                    Login = objeto.Usuario,
                    Senha = objeto.Senha
                });

                // objeto retorno
                retorno = new UsuarioViewModel
                {
                    Ativo              = busca.Ativo,
                    ContaGoogle        = busca.ContaGoogle,
                    DataCriacao        = busca.DataCriacao,
                    DataEdicao         = busca.DataEdicao,
                    Id                 = busca.Id,
                    Login              = busca.Login,
                    ResponsavelCriacao = busca.ResponsavelCriacao,
                    ResponsavelEdicao  = busca.ResponsavelEdicao,
                    Senha              = busca.Senha,
                };

                if (busca == null)
                {
                    return(retorno);
                }

                // comparar senha
                string hashGerado = CriptoHashSha256.GetSha256Hash(objeto.Senha);
                if (hashGerado == busca.Senha)
                {
                    return(retorno);
                }

                return(retorno);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
        public async Task <IActionResult> Login([FromBody] LoginMySql login)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                UsuarioLogadoMySqlViewModel usuario = await _loginMySqlService.Autentica(login);

                if (usuario == null)
                {
                    return(Unauthorized());
                }

                return(Ok(usuario));
            }
            catch (Exception e)
            {
                return(StatusCode(500, e.Message));
            }
        }
        public async Task <UsuarioLogadoMySqlViewModel> Autentica(LoginMySql login)
        {
            UsuarioLogadoMySqlViewModel usuarioLogado = null;

            if (login != null)
            {
                UsuarioViewModel usuario = VerificaLoginSenha(login);
                if (usuario == null)
                {
                    return(usuarioLogado);
                }

                IEnumerable <OrganizacaoUsuarioMySql> organizacoes = await _organizacaoMySqlRepository.ListarOrganizacoesUsuarioEmail(usuario.Login);

                OrganizacaoUsuarioMySql organizacaoUsuario = null;

                if (organizacoes.Any(x => x.UltimaAcessada))
                {
                    organizacaoUsuario = organizacoes?.FirstOrDefault(x => x.UsuarioPlataforma && x.UltimaAcessada);
                }
                else
                {
                    organizacaoUsuario = organizacoes?.FirstOrDefault(x => x.UsuarioPlataforma);
                }

                PessoaMySql pessoa = await _pessoaMySqlRepository.BuscarPorEmail(usuario.Login);

                if (!usuario.Ativo)
                {
                    return(usuarioLogado);
                }

                if (pessoa != null && !pessoa.GoobeeAdmin)
                {
                    if (organizacaoUsuario == null || !string.IsNullOrWhiteSpace(organizacaoUsuario.IdUsuario))
                    {
                        return(usuarioLogado);
                    }

                    if (organizacaoUsuario.Pessoa == null || organizacaoUsuario.Pessoa.Status == false)
                    {
                        return(usuarioLogado);
                    }

                    List <string> idsTimes = new List <string>();
                    foreach (var timePessoa in organizacaoUsuario.Pessoa.TimePessoas)
                    {
                        if (!timePessoa.Status)
                        {
                            continue;
                        }

                        if (timePessoa.IdOrganizacao == organizacaoUsuario.IdOrganizacao)
                        {
                            idsTimes.Add(timePessoa.IdTime);
                        }
                    }

                    usuarioLogado = new UsuarioLogadoMySqlViewModel()
                    {
                        DataCriacao   = organizacaoUsuario.Pessoa.DataCriacao,
                        Email         = organizacaoUsuario.Pessoa.Email,
                        Nome          = organizacaoUsuario.Pessoa.Nome,
                        Foto          = organizacaoUsuario.Pessoa.Foto,
                        Id            = organizacaoUsuario.IdUsuario,
                        IdPessoa      = organizacaoUsuario.IdPessoa,
                        IdOrganizacao = organizacaoUsuario.IdOrganizacao,
                        RoleEnum      = organizacaoUsuario.OrganizacaoUsuarioRole.Role,
                        IdsTimes      = idsTimes
                    };
                }
                else
                {
                    string idOrganizacao;

                    if (!string.IsNullOrWhiteSpace(pessoa.IdUltimaOrgAcessada))
                    {
                        idOrganizacao = pessoa.IdUltimaOrgAcessada;
                    }
                    else
                    {
                        idOrganizacao = _organizacaoMySqlRepository.Obter()?.Id;
                    }

                    usuarioLogado = new UsuarioLogadoMySqlViewModel()
                    {
                        DataCriacao   = DateTime.Now,
                        Email         = pessoa.Email,
                        Nome          = pessoa.Nome,
                        Foto          = pessoa.Foto,
                        Id            = usuario.Id,
                        IdPessoa      = pessoa.Id,
                        IdOrganizacao = idOrganizacao,
                        RoleEnum      = OrganizacaoUsuarioRoleEnum.GoobeeAdmin,
                        IdsTimes      = new List <string>(0)
                    };
                }
            }

            // gerar o token
            if (usuarioLogado != null)
            {
                usuarioLogado.Token = CriaToken(usuarioLogado);
            }

            return(usuarioLogado);
        }