Пример #1
0
        public async Task ExecuteAsync()
        {
            var usuarioDb = _usuarioRepository.GetUsuarioByEmail("*****@*****.**");

            if (usuarioDb == null)
            {
                var tipoUsuarioDb   = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Administrador));
                var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));
                // Criação do usuário
                Usuario usuario = null;
                try
                {
                    string nome  = "Administrador Padrão";
                    string email = "*****@*****.**";
                    string senha = "admin12345";

                    // Gera o código HASH da senha
                    var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, senha);

                    usuario = new Usuario(nome, email, senhaHash, tipoUsuarioDb.Id);
                }
                catch (Exception)
                {
                }

                // Cria o usuário no banco de dados
                var usuarioAdmDb = _usuarioRepository.Create(usuario);

                // Cria o 1° histórico do usuário
                HistoricoStatusUsuario historicoUsuario = null;
                try
                {
                    historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioAdmDb.Id);
                }
                catch (Exception)
                {
                }

                _historicoStatusUsuarioRepository.Create(historicoUsuario);

                // Criação do UsuarioAdministrador
                UsuarioAdministrador usuarioAdm = null;
                try
                {
                    usuarioAdm = new UsuarioAdministrador("123456", usuarioAdmDb.Id);
                }
                catch (Exception)
                {
                }

                // Cria o UsuarioAdministrador no banco de dados
                _usuarioAdministradorRepository.Create(usuarioAdm);

                // Salva as Alterações na DB
                await _usuarioAdministradorRepository.UnitOfWork.SaveDbChanges();
            }
        }
        public async Task <IActionResult> CriarUsuarioAdministrador(CriarUsuarioAdministradorInput input)
        {
            // Verifica se existe um usuário com mesmo email cadastrado no sistema
            var usuarioDb = _usuarioRepository.GetUsuarioByEmail(input.Email);

            if (usuarioDb != null)
            {
                return(StatusCode(400, "Já existe um usuário cadastrado com este email."));
            }

            // Verifica se existe um aluno cadastrado com mesmo email
            var alunoDb = _alunoRepository.BuscarPorEmail(input.Email);

            if (alunoDb != null)
            {
                return(StatusCode(400, $"Já existe um aluno cadastrado com email [{input.Email}] no sistema."));
            }

            var tipoAdmDb       = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Administrador));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Cria o usuário
            Usuario usuario = null;

            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, input.Senha);

                usuario = new Usuario(input.Nome, input.Email, senhaHash, tipoAdmDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o usuário."));
            }

            usuarioDb = _usuarioRepository.Create(usuario);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;

            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Cria o usuário administrador
            UsuarioAdministrador usuarioAdm = null;

            try
            {
                usuarioAdm = new UsuarioAdministrador(input.Nif, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao vincular o usuário à um perfil de Administrador."));
            }

            _usuarioAdministradorRepository.Create(usuarioAdm);

            await _usuarioAdministradorRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário [{usuarioDb.Email}] com perfil de {tipoAdmDb.Descricao} criado com sucesso!"));
        }
        public async Task <IActionResult> CriarUsuarioCandidato(string token, CriarUsuarioCandidatoAlunoInput input)
        {
            // Busca validacao de usuario por token
            var validacaoUsuario = _validacaoUsuarioCandidatoRepository.GetValidacaoUsuarioCandidatoByToken(token);

            // Caso não existir
            if (validacaoUsuario == null)
            {
                return(StatusCode(404, "Este Token expirou ou não existe no banco de dados."));
            }

            // Caso não seja mais válido
            if (DateTime.Now.ToUniversalTime() > validacaoUsuario.DataValida.ToUniversalTime())
            {
                // Altera para inativo caso não seja mais válido
                validacaoUsuario.AlterarParaInativo();
                _validacaoUsuarioCandidatoRepository.UpdateValidacaoUsuarioCandidato(validacaoUsuario);

                // Salva alterações no BD
                await _validacaoUsuarioCandidatoRepository.UnitOfWork.SaveDbChanges();

                return(StatusCode(400, "Este Token para validação de usuário expirou."));
            }

            // Busca aluno pelo Id
            var alunoDb = _alunoRepository.GetById(validacaoUsuario.AlunoId);

            // Caso aluno não exista mais
            if (alunoDb == null)
            {
                return(StatusCode(400, "O aluno não existe mais no banco de dados, não será permitido criar um usuário."));
            }

            var tipoCandidatoDb = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Candidato));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Cria o usuário
            Usuario usuario = null;

            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, input.Senha);

                usuario = new Usuario(alunoDb.NomeCompleto, alunoDb.Email, senhaHash, tipoCandidatoDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o usuário."));
            }

            var usuarioDb = _usuarioRepository.Create(usuario);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;

            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Cria o usuarioCandidato
            UsuarioCandidatoAluno usuarioCandidato = null;

            try
            {
                usuarioCandidato = new UsuarioCandidatoAluno(alunoDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao vincular o perfil de candidato ao usuário."));
            }

            var usuarioCandidatoDb = _usuarioCandidatoAlunoRepository.Create(usuarioCandidato);

            // Cria o perfil do usuarioCandidato (linkExterno e SobreOCandidato vazios)
            PerfilUsuarioCandidatoAluno perfilCandidato = null;

            try
            {
                perfilCandidato = new PerfilUsuarioCandidatoAluno("", "", usuarioCandidatoDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o perfil padrão do candidato."));
            }

            _usuarioCandidatoAlunoRepository.CreatePerfilUsuarioCandidatoAluno(perfilCandidato);

            // Altera para validação Inativa (para não registrar dois usuários candidatos iguais)
            validacaoUsuario.AlterarParaInativo();
            _validacaoUsuarioCandidatoRepository.UpdateValidacaoUsuarioCandidato(validacaoUsuario);

            await _usuarioCandidatoAlunoRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário [{alunoDb.Email}] com perfil de {tipoCandidatoDb.Descricao} criado com sucesso!"));
        }
        public async Task <IActionResult> CriarUsuarioEmpresa(CriarUsuarioEmpresaInput input)
        {
            if (!ValidatorUtil.CnpjIsValid(input.Cnpj))
            {
                return(StatusCode(400, "CNPJ Inválido."));
            }

            var usuarioDb = _usuarioRepository.GetUsuarioByEmail(input.Email);

            // Verifica se já existe um usuário com mesmo email cadastrado no sistema
            if (usuarioDb != null)
            {
                return(StatusCode(400, $"Já existe um usuário com email [{input.Email}] no sistema."));
            }

            // Verifica se existe um aluno cadastrado com mesmo email
            var alunoDb = _alunoRepository.BuscarPorEmail(input.Email);

            if (alunoDb != null)
            {
                return(StatusCode(400, $"Já existe um aluno cadastrado com email [{input.Email}] no sistema."));
            }

            var empresaDb = _empresaRepository.GetByCNPJ(input.Cnpj);

            if (empresaDb == null)
            {
                #region Verifica se já existe uma empresa com o mesmo CNPJ cadastrada no sistema
                var responseReceita = await apiRequestService.ReceitaWS(input.Cnpj);

                if (responseReceita == null)
                {
                    return(StatusCode(400, "Ocorreu um erro na busca do CNPJ da Empresa, tente novamente mais tarde."));
                }

                if (responseReceita.Status.Equals("ERROR") || responseReceita.Status.Equals("CNPJ inválido") || !responseReceita.Status.Equals("OK"))
                {
                    return(StatusCode(400, $"{responseReceita.Message}"));
                }

                #region Cadastra/Busca endereços e vincula-os

                TipoEmpresa tipoEmpresa = null;

                if (responseReceita.TipoEmpresa.ToUpper() == TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.FILIAL))
                {
                    tipoEmpresa = _tipoEmpresaRepository.GetByDescricao(TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.FILIAL));
                }

                if (responseReceita.TipoEmpresa.ToUpper() == TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.MATRIZ))
                {
                    tipoEmpresa = _tipoEmpresaRepository.GetByDescricao(TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.MATRIZ));
                }

                if (tipoEmpresa == null)
                {
                    return(StatusCode(400, "Houve um erro ao adquirir o tipo da empresa."));
                }

                var responseViaCep = await apiRequestService.ViaCEP(FormatStringUtil.CaracterClear(responseReceita.CEP));

                if (responseViaCep == null)
                {
                    return(StatusCode(400, "Ocorreu um erro na busca do endereço da Empresa, tente novamente mais tarde."));
                }

                var UfSiglaDb = _enderecoRepository.GetUfSiglaBySigla(responseViaCep.UfSigla);

                if (UfSiglaDb == null)
                {
                    return(StatusCode(400, "Não existe UF's necessárias cadastradas no banco de dados, não é possível prosseguir com o cadastro da empresa."));
                }

                var municipioDb = _enderecoRepository.GetMunicipioByDescricao(responseViaCep.Localidade);

                // Cria um novo município caso não encontre já criado no banco de dados.
                if (municipioDb == null)
                {
                    try
                    {
                        municipioDb = new Municipio(responseViaCep.Localidade, UfSiglaDb.Id);

                        municipioDb = _enderecoRepository.CreateMunicipio(municipioDb);
                    }
                    catch (Exception)
                    {
                        return(StatusCode(500, "Houve um erro interno ao criar um novo município no banco de dados para a Empresa."));
                    }
                }

                // Verifica quais campos que não estão vazios para criar o endereço
                string logradouroPreenchido = string.IsNullOrEmpty(responseViaCep.Logradouro) == false ? responseViaCep.Logradouro : responseReceita.Logradouro;
                string bairroPreenchido     = string.IsNullOrEmpty(responseViaCep.Bairro) == false ? responseViaCep.Bairro : responseReceita.Bairro;

                // Cria novo endereço para a Empresa
                Endereco endereco = null;
                try
                {
                    endereco = new Endereco(responseViaCep.Cep, bairroPreenchido, logradouroPreenchido, responseReceita.Numero, municipioDb.Id);
                }
                catch (Exception)
                {
                    return(StatusCode(500, "Houve um erro interno criar um endereço para a Empresa."));
                }

                var enderecoDb = _enderecoRepository.Create(endereco);

                #endregion

                // Verifica se fantasia esta nula e substitui por nome, caso contrário, mantem fantasia
                string nomeEmpresa = string.IsNullOrEmpty(responseReceita.Fantasia) ? responseReceita.Nome : responseReceita.Fantasia;

                // Cria Empresa
                empresaDb = null;
                try
                {
                    empresaDb = new Empresa(input.Cnpj, nomeEmpresa, enderecoDb.Id, tipoEmpresa.Id);
                }
                catch (Exception)
                {
                    return(StatusCode(500, "Houve um erro interno ao criar uma Empresa."));
                }

                // Cria Empresa no BD
                empresaDb = _empresaRepository.Create(empresaDb);

                #region Registra todos os TiposCnaes (Atividade Principal e Atividade Secundária)

                // Default Values Atividade principal e secundária
                var AtividadePrincipalDb  = _tipoAtividadeCnaeRepository.GetByDescricao(TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadePrincipal));
                var AtividadeSecundariaDb = _tipoAtividadeCnaeRepository.GetByDescricao(TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadeSecundaria));

                // Atividade Principal
                TipoCnae tipoCnaeDb = null;

                if (responseReceita.AtividadePrincipal.Any())
                {
                    foreach (var ap in responseReceita.AtividadePrincipal)
                    {
                        tipoCnaeDb = _empresaRepository.GetTipoCnaeByCodigo(ap.Code);

                        if (tipoCnaeDb == null)
                        {
                            try
                            {
                                tipoCnaeDb = new TipoCnae(ap.Text, ap.Code);

                                tipoCnaeDb = _empresaRepository.CreateTipoCnae(tipoCnaeDb);
                            }
                            catch (Exception)
                            {
                                return(StatusCode(500, "Houve um erro interno ao criar a Atividade Principal da Empresa, tente novamente mais tarde."));
                            }
                        }

                        AtividadeCnae atividadeCnae = null;
                        try
                        {
                            atividadeCnae = new AtividadeCnae(tipoCnaeDb.Id, AtividadePrincipalDb.Id, empresaDb.Id);

                            _empresaRepository.CreateAtividadeCnae(atividadeCnae);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao vincular o CNAE à Empresa, tente novamente mais tarde."));
                        }
                    }
                }

                // Atividades Secundárias
                if (responseReceita.AtividadeSecundaria.Any())
                {
                    foreach (var ats in responseReceita.AtividadeSecundaria)
                    {
                        tipoCnaeDb = _empresaRepository.GetTipoCnaeByCodigo(ats.Code);

                        if (tipoCnaeDb == null)
                        {
                            try
                            {
                                tipoCnaeDb = new TipoCnae(ats.Text, ats.Code);

                                tipoCnaeDb = _empresaRepository.CreateTipoCnae(tipoCnaeDb);
                            }
                            catch (Exception)
                            {
                                return(StatusCode(500, "Houve um erro interno ao criar alguma Atividade Secundária da Empresa, tente novamente mais tarde."));
                            }
                        }

                        AtividadeCnae atividadeCnae = null;
                        try
                        {
                            atividadeCnae = new AtividadeCnae(tipoCnaeDb.Id, AtividadeSecundariaDb.Id, empresaDb.Id);

                            _empresaRepository.CreateAtividadeCnae(atividadeCnae);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao vincular o CNAE à Empresa, tente novamente mais tarde."));
                        }
                    }
                }

                #endregion

                // Registra todos da lista de QSA
                if (responseReceita.QSA.Any())
                {
                    foreach (var qsa in responseReceita.QSA)
                    {
                        QSA qsaDb = null;
                        try
                        {
                            qsaDb = new QSA(qsa.Nome, qsa.Qual, empresaDb.Id);

                            _empresaRepository.CreateQSA(qsaDb);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao criar o QSA da Empresa."));
                        }
                    }
                }
                #endregion
            }
            else
            {
                #region Caso empresa já exista
                var usuarioEmpresaDb = _usuarioEmpresaRepository.GetByEmpresaId(empresaDb.Id);

                // Verifica se já existe um usuário vinculado à empresa
                if (usuarioEmpresaDb != null)
                {
                    return(StatusCode(400, $"A Empresa de CNPJ [{input.Cnpj}] já está vinculada à um usuário."));
                }
                #endregion
            }

            var tipoEmpresaDb   = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Empresa));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Criação do usuário
            usuarioDb = null;
            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuarioDb, input.Senha);

                usuarioDb = new Usuario(input.Nome, input.Email, senhaHash, tipoEmpresaDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o Usuário."));
            }

            usuarioDb = _usuarioRepository.Create(usuarioDb);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;
            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Criação do UsuarioEmpresa, vincula o usuário à empresa criada
            UsuarioEmpresa usuarioEmpresa = null;
            try
            {
                usuarioEmpresa = new UsuarioEmpresa(empresaDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o UsuarioEmpresa (vincular o usuário à empresa)."));
            }

            _usuarioEmpresaRepository.Create(usuarioEmpresa);

            await _usuarioRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário {usuarioDb.Email} com perfil de Empresa com CNPJ {empresaDb.CNPJ} criado com sucesso!"));
        }
Пример #5
0
        public async Task <IActionResult> PutDesativarUsuario(string email, long usuarioId)
        {
            // Busca o adm pelo usuarioId
            var admDb = _usuarioRepository.GetById(usuarioId);

            // Caso não encontre
            if (admDb == null)
            {
                return(StatusCode(404, $"Este usuário de id [{usuarioId}] não existe."));
            }

            // Busca o vinculo entre Usuario X Administrador
            var usuarioAdm = _usuarioAdministradorRepository.GetByUsuarioId(admDb.Id);

            // Caso não encontre, não é um perfil de administrador
            if (usuarioAdm == null)
            {
                return(StatusCode(401, "Este usuário não tem um perfil de administrador para desativar um usuário."));
            }

            // Busca um usuário por email
            var usuarioBuscado = _usuarioRepository.GetUsuarioByEmail(email);

            // Caso não encontre
            if (usuarioBuscado == null)
            {
                return(StatusCode(404, "Usuário não encontrado!"));
            }

            // Caso o administrador tente desativar seu próprio usuário
            if (usuarioBuscado.Email == admDb.Email)
            {
                return(StatusCode(403, "Você não pode excluir seu próprio usuário."));
            }

            // Caso o adminisrador tente desativar o usuário padrão da plataforma
            if (usuarioBuscado.Email == "*****@*****.**")
            {
                return(StatusCode(403, "Você não pode excluir o administrador padrão."));
            }

            // Busca o historico do usuário
            var historicoBuscado = _historicoStatusUsuarioRepository.GetHistoricoAtualByUsuarioId(usuarioBuscado.Id);

            // Caso não encontre
            if (historicoBuscado == null)
            {
                return(StatusCode(404, "Histórico de Status do usuário não encontrado!"));
            }

            // Pega o status padrão "Conta Desativado"
            var StatusUsuario = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaDesativada));

            // Pega o status padrão "Conta ativa"
            var StatusUsuarioAtivo = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Caso a conta não estja ativa
            if (historicoBuscado.StatusUsuarioId != StatusUsuarioAtivo.Id)
            {
                return(StatusCode(404, "Este usuário ja está desativado!"));
            }

            // Altera o atual para antigo e cria o novo historico
            HistoricoStatusUsuario historicoStatusUsuario = null;

            try
            {
                historicoBuscado.AlterarParaAntigo();
                _historicoStatusUsuarioRepository.PutAlterarHistorico(historicoBuscado);

                historicoStatusUsuario = new HistoricoStatusUsuario(StatusUsuario.Id, usuarioBuscado.Id);
                _historicoStatusUsuarioRepository.Create(historicoStatusUsuario);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico"));
            }

            // Salva alterações no BD
            await _historicoStatusUsuarioRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, "Usuário desativado!"));
        }
Пример #6
0
        public IActionResult Post(LoginInput login)
        {
            try
            {
                Usuario usuarioBuscado = _usuarioRepository.GetUsuarioByEmail(login.Email);
                PasswordVerificationResult validacaoSenha = PasswordVerificationResult.Failed;

                if (usuarioBuscado != null)
                {
                    validacaoSenha = new PasswordHasher <Usuario>().VerifyHashedPassword(usuarioBuscado, usuarioBuscado.Senha, login.Senha);
                }

                if (usuarioBuscado == null || validacaoSenha == PasswordVerificationResult.Failed)
                {
                    return(NotFound("Email e/ou senha inválidos."));
                }

                // Busca o historicoStatusUsuario pelo ID do usuário
                HistoricoStatusUsuario historicoStatus = _historicoStatusUsuarioRepository.GetHistoricoAtualByUsuarioId(usuarioBuscado.Id);

                if (historicoStatus == null)
                {
                    return(StatusCode(404, "Não foi encontrado um histórico de status desse usuário."));
                }

                // Busca o status "Conta Ativa"
                var statusUsuarioAtivoDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

                // Busca o status do usuário buscado
                var statusUsuarioBuscado = _statusUsuarioRepository.GetById(historicoStatus.StatusUsuarioId);

                // O historicoStatus do usuário buscado é igual à conta ATIVA? Caso NÃO, retorna erro que o usuário não é mais autorizado a logar no site.
                if (historicoStatus.StatusUsuarioId != statusUsuarioAtivoDb.Id)
                {
                    return(Unauthorized($"O usuário [{usuarioBuscado.Email}] está com a {statusUsuarioBuscado.Descricao}."));
                }

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Email, usuarioBuscado.Email),

                    new Claim(JwtRegisteredClaimNames.Jti, usuarioBuscado.Id.ToString()),

                    new Claim(ClaimTypes.Role, usuarioBuscado.TipoUsuarioId.ToString()),

                    new Claim("role", usuarioBuscado.TipoUsuarioId.ToString()),

                    new Claim(JwtRegisteredClaimNames.UniqueName, usuarioBuscado.Nome)
                };

                var key = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("senaivagas-chave-autenticacao"));

                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "Senai.Vagas.Backend",
                    audience: "Senai.Vagas.Backend",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(30),
                    signingCredentials: creds
                    );


                return(Ok(new
                {
                    token = new JwtSecurityTokenHandler().WriteToken(token)
                }));
            }
            catch (Exception error)
            {
                // Retorna a resposta da requisição 400 - Bad Request e o erro ocorrido com uma mensagem
                return(StatusCode(500, $"Houve um erro interno ao gerar o Token de usuário | [{error.Message}]"));
            }
        }