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
            });
        }
示例#4
0
        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
                });
            }
        }