public ResponseBase <bool> PostInscricao([FromBody] InscricaoRequest request)
 {
     using (UsuarioAppService appService = new UsuarioAppService(_configuration, _contexto))
     {
         var br = appService.Inscrever(request);
         br.TempoLevado = appService.swTempoRequisicao.Elapsed;
         br.Autorizado  = br.Mensagens.Count == 0;
         return(br);
     }
 }
        public ResponseBase <bool> Inscrever(InscricaoRequest request)
        {
            ResponseBase <bool> br = new ResponseBase <bool>();

            var usuario = new Usuario(request.Nome, request.Senha, request.ConfirmacaoDeSenha, request.Email, request.Telefone)
            {
                Idioma = _contexto.Idioma.FirstOrDefault(i => i.Id == request.Idioma)
            };

            if (request.Tipo.HasValue)
            {
                usuario.Tipo = (TipoDeUsuario)request.Tipo;
            }

            if (_contexto.Usuario.Where(x => x.Email == request.Email).Count() > 0)
            {
                br.Mensagens.Add("Já existe um usuário cadastrado com este e-mail.");
            }

            var validationContext = new ValidationContext(usuario, null, null);
            var validationResults = ((IValidatableObject)usuario).Validate(validationContext);

            if (validationResults.Count() > 0)
            {
                foreach (ValidationResult v in validationResults)
                {
                    br.Mensagens.Add(v.ErrorMessage);
                }
            }

            if (br.Sucesso)
            {
                _contexto.Usuario.Add(usuario);
                if (_contexto.SaveChanges() > 0)
                {
                    // Enviar e-mail com token de validação do cadastro!
                    //http://app.demo.ethm.com/login?type=confirmed-email&token=asdhuasdhuashudashuduhasd

                    var template = @"<!DOCTYPE html><html lang=""en"" xmlns=""http://www.w3.org/1999/xhtml""><head><meta charset=""utf-8"" /><title>demo.ethm</title></head><body><p>Clique <a href=""http://app.demo.ethm.com/login?type=confirmed-email&token={token}"">aqui</a> para confirmar seu cadastro em demo.ethm.com.</p></body></html>";

                    var assem = GetType().Assembly;

                    //var lista = assem.GetManifestResourceNames();

                    using (var stream = assem.GetManifestResourceStream("demo.ethm.Aplicacao.Resources.email_confirmar_cadastro_pt_br.html"))
                    {
                        template = new StreamReader(stream).ReadToEnd();
                    }

                    template.Replace("{token}", usuario.TokenConfirmacaoEmail);

                    // SMTP
                    // Server name: smtp-mail.outlook.com
                    // Port: 587
                    // Encryption method: TLS
                    // TODO: Move to configuration file
                    EmailHelper helper = new EmailHelper("smtp-mail.outlook.com", false, 25, "*****@*****.**", "lcD!12345");

                    // TODO: Traduzir assunto do e-mail de confirmação de cadastro
                    br.Sucesso = helper.Enviar(usuario.Email, Constants.ArquivoDeConfiguracao.Default.EmailSuporte, "demo.ethm - Confirmação de Cadastro", template.Replace("\r\n", "<br />").Replace("&", "&amp;"));
                }
            }

            return(br);
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Criar(Guid idDesafio, InscricaoRequest inscricaoRequest)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            var desafio = await _desafioService.FindAsNoTracking(idDesafio);

            if (desafio == null)
            {
                return(NotFound("Desafio não encontrado."));
            }

            if (desafio.Id != inscricaoRequest.DesafioId)
            {
                return(BadRequest("O id do desafio informado no payload é diferende do informado na rota."));
            }

            if (desafio.LimiteInscricao.HasValue)
            {
                var inscricoes = await _inscricaoService.ObterInscricoesDesafioCandidato(idDesafio);

                if (inscricoes.Count() >= desafio.LimiteInscricao)
                {
                    return(BadRequest("Este desafio já atingiu seu limite de inscrições."));
                }
            }

            if (desafio.DataFechamento.HasValue)
            {
                if (desafio.DataFechamento.Value <= DateTime.Now)
                {
                    return(BadRequest("Este desafio já foi fechado e não permite novas inscrições."));
                }
            }

            var user = new ApplicationUser
            {
                DataNascimento = inscricaoRequest.DataNascimento,
                Email          = inscricaoRequest.Email,
                LinkGithub     = inscricaoRequest.LinkGithub,
                LinkLinkedin   = inscricaoRequest.LinkLinkedin,
                Nome           = inscricaoRequest.Nome,
                PhoneNumber    = inscricaoRequest.Celular,
                UserName       = inscricaoRequest.Email
            };

            var result = await _userManager.CreateAsync(user, "Senhapadrao#1234");

            if (!result.Succeeded)
            {
                foreach (var erro in result.Errors)
                {
                    NotificarErro(erro.Description);
                }

                return(CustomResponse());
            }

            var candidato = new Candidato
            {
                ApplicationUserId = user.Id,
                Profissao         = inscricaoRequest.Profissao,
                Endereco          = _mapper.Map <Endereco>(inscricaoRequest.Endereco)
            };
            await _candidatoService.Add(candidato);

            await _userManager.AddToRoleAsync(user, "Candidato");

            var inscricao = new Inscricao
            {
                DesafioId         = idDesafio,
                CandidatoId       = candidato.Id,
                DataInscricao     = DateTime.Now,
                DataInicializacao = DateTime.Now,
                DataFinalizacao   = DateTime.Now
            };
            await _inscricaoService.Add(inscricao);

            foreach (var resposta in inscricaoRequest.Respostas)
            {
                await _respostaService.Add(new Resposta
                {
                    InscricaoId = inscricao.Id,
                    QuestaoId   = resposta.QuestaoId,
                    Descricao   = resposta.Descricao
                });
            }

            return(CustomResponse(new InscricaoCreateResponse
            {
                IdInscricao = inscricao.Id,
                Message = "Inscrição realizada com sucesso!"
            }));
        }