public async Task <IActionResult> CriarValidacaoUsuarioCandidato(CriarValidacaoUsuarioCandidatoInput input) { // Busca aluno por RMA ou Email var alunoDb = _alunoRepository.BuscarPorEmailouRMA(input.RmaouEmail); // Caso for nulo, não existe aluno if (alunoDb == null) { return(StatusCode(404, $"Não existe um aluno com estes dados.")); } // Busca usuario por email para verificar se já existe algum candidato com este email var usuarioDb = _usuarioRepository.GetUsuarioByEmail(alunoDb.Email); if (usuarioDb != null) { return(StatusCode(400, "Já existe um usuário com este e-mail.")); } // Busca referencia de aluno em algum usuarioCandidato var usuarioCandidatoDb = _usuarioCandidatoAlunoRepository.GetByAlunoId(alunoDb.Id); // Caso existir referencia, já existe usuário vinculado à este aluno if (usuarioCandidatoDb != null) { return(StatusCode(400, $"O aluno [{alunoDb.NomeCompleto}] já é vinculado à um usuário.")); } // Caso aluno não tiver email, não será possível criar o cadastro if (string.IsNullOrEmpty(alunoDb.Email)) { return(StatusCode(404, $"O aluno [{alunoDb.NomeCompleto}] não tem um e-mail cadastrado. Contate a administração do SENAI para atualizar seu cadastro, para assim ser possível o prosseguimento da criação de sua conta no SENAI Vagas.")); } string token = ""; ValidacaoUsuarioCandidato validacaoUsuario = null; try { // Verifica se já existe no BD uma validacao com o mesmo aluno existente var validacaoAntiga = _validacaoUsuarioCandidatoRepository.GetValidacaoUsuarioCandidatoAtualByAlunoId(alunoDb.Id); // Caso existir, altera para antiga if (validacaoAntiga != null) { validacaoAntiga.AlterarParaInativo(); _validacaoUsuarioCandidatoRepository.UpdateValidacaoUsuarioCandidato(validacaoAntiga); } // Cria a nova validação token = GenerationTokenUtil.TokenDefault(); validacaoUsuario = new ValidacaoUsuarioCandidato(token, alunoDb.Id); } catch (Exception) { return(StatusCode(500, "Houve um erro interno ao criar a validação de usuário.")); } // Cria validação de usuário no BD _validacaoUsuarioCandidatoRepository.Create(validacaoUsuario); // Envia email de verificação de usuário/aluno e valida se houver algum erro if (!sendEmailService.EmailVerificacaoCandidato(alunoDb.Email.ToLower(), alunoDb.NomeCompleto, token)) { return(StatusCode(500, "Houve um erro interno ao enviar o email para validação de usuário.")); } // Salva alterações no BD await _validacaoUsuarioCandidatoRepository.UnitOfWork.SaveDbChanges(); return(StatusCode(200, $"Foi enviado ao email {alunoDb.Email} um link de validação de usuário / Aluno. O link é válido por 30 minutos.")); }
public async Task <IActionResult> SolicitacaoAlterarCredenciais(SolicitacaoAlterarCredenciaisInput input) { var usuarioDb = _usuarioRepository.GetUsuarioByEmail(input.EmailAtual); if (usuarioDb == null) { return(StatusCode(404, $"Não foi encontrado um usuário com o email [{input.EmailAtual}].")); } var alterarCredenciaisDb = _alterarCredenciaisRepository.GetAtualByUsuarioId(usuarioDb.Id); if (alterarCredenciaisDb != null) { alterarCredenciaisDb.AlterarParaInativo(); _alterarCredenciaisRepository.UpdateAlterarCredenciais(alterarCredenciaisDb); } var token = GenerationTokenUtil.TokenDefault(); AlterarCredenciais alterarCredenciais = null; try { if (string.IsNullOrEmpty(input.NovoEmail)) { alterarCredenciais = new AlterarCredenciais(token, usuarioDb.Id); } else { alterarCredenciais = new AlterarCredenciais(token, input.NovoEmail, usuarioDb.Id); } } catch (Exception) { return(StatusCode(500, "Houve um erro interno ao criar o objeto AlterarCredenciais.")); } _alterarCredenciaisRepository.Create(alterarCredenciais); string propAtualizada = string.IsNullOrEmpty(input.NovoEmail) == true ? "Senha" : "Email"; string emailEnviado = string.IsNullOrEmpty(input.NovoEmail) == true ? usuarioDb.Email : input.NovoEmail; // Caso novo email não estiver vazio ou nulo, significa que o usuário deseja alterar seu email, caso contrário, deseja alterar sua senha if (!string.IsNullOrEmpty(input.NovoEmail)) { // Envia email com link para alterar o email do usuário if (!sendEmailService.AlterarCredenciaisEmail(input.NovoEmail, usuarioDb.Nome, propAtualizada, token)) { return(StatusCode(500, "Houve um erro interno ao enviar o email para o usuário.")); } } else { // Envia email com link para alterar a senha do usuário if (!sendEmailService.AlterarCredenciaisSenha(usuarioDb.Email, usuarioDb.Nome, propAtualizada, token)) { return(StatusCode(500, "Houve um erro interno ao enviar o email para o usuário.")); } } await _alterarCredenciaisRepository.UnitOfWork.SaveDbChanges(); return(StatusCode(200, $"Foi enviado ao email {emailEnviado} um link para alterar suas credenciais ({propAtualizada.ToLower()}). O link é válido por 30 minutos.")); }