1
resposta

[Projeto] O meu saiu diferente da resolução, então vou compartilhar. :)

A resolução desse desafio foi bem diferente do resultado que eu cheguei, então fiquei interessado em detalhar a minha criação e já aproveito pra reforçar os meus estudos explicando a idéia.


//  Começando que por lá a quantidade de ingressos foi definida usando o texto que contem no <span> do index.html, por aqui eu escolhi para ser definido pelo JS mesmo, então essas váriaveis podem ser manipuladas pra alterar a quantidade de ingressos.

let pistaIngressos = 100;
let superiorIngressos = 200;
let inferiorIngressos = 400;

// Puxa a função responsavél por atualizar os <span> do html.

atualizarIgressosDisponivel();

// Aqui a função principal do botão comprar, ele faz uma verificação do ingresso escolhido puxando o valor do seletor, e támbem puxa a quantidade informada no input, criei uma variavel de controle da compra que sempre recebe como true ao puxar a função.

function comprar() {
    
    let ingresso = document.getElementById('tipo-ingresso').value;
    let quantidade = document.getElementById('qtd').value;
    let comprado = true;

    //  Nesse estágio ele faz uma verificação se a quantidade é valida e com as condições certas ele ja desconta o total de ingressos disponivel. Caso um critério de erro aconteça tipo a quantidade do input sair como 0 ou um numero negativo, ou não tiver ingressos suficiente para venda ele atribui a variavel comprado como FALSE, isso é importante pro funcionamento da função [exibirAlerta()].

    if ( quantidade <= 0) {
        comprado = false;
    } else if ( ingresso === 'inferior' && quantidade <= inferiorIngressos ) {
        inferiorIngressos = inferiorIngressos - quantidade;
    } else if ( ingresso === 'superior' && quantidade <= superiorIngressos) {
        superiorIngressos = superiorIngressos - quantidade;
    } else if ( ingresso === 'pista' && quantidade <= pistaIngressos) {
        pistaIngressos = pistaIngressos - quantidade;
    } else {
        comprado = false;
    }

    // No final da verificação ele aciona essas duas funções que vou explicar o funcionamento a baixo, e na [exibirAlerta()] eu levei junto o tipo de ingresso, a quantidade do input e a condição pra definir se a compra deu certo ou errado.

    exibirAlerta(ingresso,quantidade,comprado);

    atualizarIgressosDisponivel();

}

// Essa função é a responsavel por organizar as mensagens passadas, aqui vai avisar se a compra foi um sucesso ou se aconteceu algum erro.

function exibirAlerta(i,q,c) {

    // Essa variavel é mais um charme mesmo por ela vai receber a informação da categoria certinho pra deixar as mensagens mais completas.

    let nome;

    // E aqui ele faz a verificação pra definir qual categoria vai ser guardada na variavel [nome] e junto no [i] ele vai guardar a quantidade de ingressos disponiveis pra mais um charme na hora de exibir a mensagem de erro por quantidade de ingressos indisponivel.

    if (i === 'inferior') {
        i = inferiorIngressos;
        nome = 'Cadeira Inferior';
    } else if (i === 'superior') {
        i = superiorIngressos;
        nome = 'Cadeira Superior';
    } else if (i === 'pista') {
        i = pistaIngressos;
        nome = 'Pista';
    }
    

    // E por fim a seleção da mensagem final, se a condição da variavel [comprada] que agora é a [c] continua como TRUE ele informa a mensagem de sucesso, caso o contrario ele faz a verificação se o erro foi por um valor invalido informado no input, ou se a quantidade de ingressos é maior do que a quantidade que tem a venda, ou se ja está esgotado.

    if ( c === true ) {
        alert(`Compra de ${q} ingressos na categoria ${nome} efetuado com sucesso! :)`);
    } else {
        if (q <= 0) {
            alert(`Quantidade invalida!`);
        } else if (i > 0) {
            alert(`Não foi possivel concluir a compra pois restam apenas ${i} ingressos na ${nome}, altere a quantidade desejada.`);
        } else {
            alert(`Ingressos da categoria ${nome} estão esgotados.`);
        }
    }

}


// E aqui bem basico é o responsavel por atualizar a informação visual dos <span> no html informando a quantidade de ingressos disponiveis, só muda mesmo o texto dentro do <span> que é a variavel com a quantidade de cada ingresso.

function atualizarIgressosDisponivel() {

    document.getElementById('qtd-pista').textContent = `${pistaIngressos}`;
    document.getElementById('qtd-superior').textContent = `${superiorIngressos}`;
    document.getElementById('qtd-inferior').textContent = `${inferiorIngressos}`;

}

É isso ai. :)
Se tiver algo que eu tenha feito errado, ou seja algo ruim em questão de boas-praticas pode me corrigir. hehe

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Bom dia, Vinicius! Tudo bem?

Parabéns por compartilhar sua solução para o desafio! É sempre interessante ver como as pessoas abordam o mesmo problema e desenvolvem suas próprias soluções.

Continue explorando e experimentando diferentes abordagens, isso é essencial para o crescimento no campo da programação!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!