public async Task ValidarRequest(CotacaoRequestDto request, int idade) { if (idade < 18) { throw new Exception("Não é permitido contratante menor de 18 anos"); } Regex rgx = new Regex("^\\d{5}[-]\\d{3}$"); if (!rgx.IsMatch(request.Endereco.Cep)) { throw new Exception("CEP inválido"); } if (request.Coberturas.Length == 0) { throw new Exception("Obrigatório pelo menos uma cobertura"); } if (request.Coberturas.Length > 4) { throw new Exception("Máximo de 4 coberturas"); } if (await VerificarCidadeNaoAtendida(request.Endereco.Cidade)) { throw new Exception("Cidade não atendida"); } }
private decimal SomarCoberturas(CotacaoRequestDto request) { decimal valorTotalCoberturas = 0; foreach (var cobertura in request.Coberturas) { valorTotalCoberturas += _repository.ObterCoberturaAsync(int.Parse(cobertura)).Result.Valor; } return(valorTotalCoberturas); }
public async Task <CotacaoResponseDto> CalcularCotacao(CotacaoRequestDto request) { var idade = CalcularIdade(DateTime.Parse(request.Nascimento)); await ValidarRequest(request, idade); decimal valorTotalCoberturas = SomarCoberturas(request); decimal valorPremio = CalcularDesconto(idade, valorTotalCoberturas); var parcelas = ObterParcelamento(valorPremio); return(new CotacaoResponseDto { Valor_Parcelas = valorPremio / parcelas, Cobertura_Total = valorTotalCoberturas, Primeiro_Vencimento = ObterProximoQuintoDiaUtil().ToString(), Parcelas = parcelas, Premio = valorPremio }); }
public async Task <JsonResult> PriceAsync([FromBody] CotacaoRequestDto request) { try { var response = await _service.CalcularCotacao(request); return(new JsonResult(response) { StatusCode = (int)HttpStatusCode.OK, Value = response }); } catch (Exception ex) { return(new JsonResult(ex) { StatusCode = (int)HttpStatusCode.BadRequest, Value = ex.Message }); } }