public ServiceResult ConfirmarConta(ConfirmarClienteDTO model) { _logger.LogDebug("A executar [ClienteBusiness -> ConfirmarConta]"); if (string.IsNullOrWhiteSpace(model.Email)) { throw new ArgumentNullException("Email", "Campo não poder ser nulo!"); } if (string.IsNullOrWhiteSpace(model.Codigo)) { throw new ArgumentNullException("Codigo", "Campo não poder ser nulo!"); } IList <int> erros = new List <int>(); if (!_clienteDAO.ExisteEmail(model.Email)) { _logger.LogWarning($"O Email {model.Email} não existe!"); erros.Add((int)ErrosEnumeration.EmailNaoExiste); } else { if (_clienteDAO.ContaConfirmada(model.Email)) { _logger.LogDebug($"O Email {model.Email} já se encontra confirmado."); erros.Add((int)ErrosEnumeration.ContaJaConfirmada); } if (!_clienteDAO.GetCodigoValidacao(model.Email).Equals(model.Codigo)) { _logger.LogDebug($"Código de Validação errado para o Email {model.Email}."); int numTentativas = _clienteDAO.GetNumTentativas(model.Email); if (numTentativas > 0) { _logger.LogDebug($"O Código de Validação está errado. restam-lhe {numTentativas-1} tentativas."); erros.Add((int)ErrosEnumeration.CodigoValidacaoErrado); _clienteDAO.DecrementaTentativas(model.Email); } else { _logger.LogDebug("O Código de Validação está errado. Cliente eliminado."); erros.Add((int)ErrosEnumeration.NumTentativasExcedido); } } if (!erros.Any()) { _clienteDAO.ValidarConta(model.Email); } } return(new ServiceResult { Erros = new ErrosDTO { Erros = erros }, Sucesso = !erros.Any() }); }
public async Task <IActionResult> ConfirmarConta([FromBody] ConfirmarClienteDTO model) { _logger.LogDebug("A executar api/cliente/confirmar -> Post"); if (model is null) { _logger.LogWarning("O objeto ConfirmarClienteDTO é null!"); return(BadRequest(nameof(model))); } try { ServiceResult resultado = _clienteBusiness.ConfirmarConta(model); if (resultado.Sucesso) { _logger.LogInformation($"O Cliente com Email {model.Email} confirmou a sua conta com sucesso."); ServiceResult <Email> resultadoEmails = _clienteBusiness.GetEmailBoasVindas(model.Email, _webHostEnvironment.ContentRootPath); if (resultadoEmails.Sucesso) { await _emailSenderService.SendEmail(model.Email, resultadoEmails.Resultado); _logger.LogInformation("Email de Boas Vindas enviado com sucesso."); return(Ok()); } else { _logger.LogInformation("Ocorreu um erro na leitura do Email de Boas Vindas."); return(BadRequest(resultadoEmails.Erros)); } } else { _logger.LogInformation("Ocorreu um erro ao confirmar conta."); return(BadRequest(resultado.Erros)); } } catch (ArgumentNullException e) { _logger.LogError(e, e.Message); return(BadRequest(new { message = e.Message })); } catch (Exception e) { _logger.LogError(e, e.Message); return(StatusCode(500)); } }