1
resposta

[Sugestão] Verificando se a quantidade é decimal para evitar burlar o cálculo

O código de validação estava proibindo apenas zero e números negativos (<=0), mas não estava proibindo os decimais.

Por exemplo, se o preço unitário do produto é R$100, inserir 0,5 na quantidade resultará no cálculo total de R$ 50 no carrinho. Em tese, o usuário conseguiria burlar o preço total da compra usando decimais para pagar por "meio produto". Pesquisei um pouco e consegui inserir outra validação para verificar também decimais e evitar essa burlada no sistema.

Usei o método isNaN novamente, porém verificando se não é número com !isNan. Depois, fiz um teste:

Usando parseInt e parseFloat, fiz uma comparação de desigualdade. Convertendo a string de quantidade para inteiro e depois para decimal (ponto flutuante). Se os valores forem diferentes, então temos um número decimal. Daí, basta inserir o alert e reiniciar o código.

Trecho do código abaixo:

function adicionar () {
    //recuperar valores, nome do produto, quantidade e valor
    let produto = document.getElementById('produto').value;
    let nomeProduto = produto.split('-')[0];
    let valorUnitario = produto.split('R$')[1];
    let quantidade = document.getElementById('quantidade').value;
    if (isNaN(quantidade) || quantidade <= 0){
       alert("Insira uma quantidade válida.");
       return; 
    }
    if (!isNaN(quantidade)) {
        if(parseInt(quantidade) != parseFloat(quantidade)) {
            alert("Insira uma quantidade válida.");
            return;
        }
    }
1 resposta

Olá, Francie! Tudo bem?

Gostei bastante da sugestão de melhoria para o desafio! Você teve um olhar clinico ao se colocar como usuário e imaginar situações onde ele poderia explorar falhas ou faltas de restrições no projeto.

Então, agradeço por compartilhar toda essa visão e o seu código, é sempre importante compartilhar conhecimento para fixar ele melhor e também ajudar a comunidade.

Continue assim e bons estudos!