0
respostas

Faça como eu fiz: atualizando informações no estoque aprimrado

from srcs.exceptions import EstoqueVazioError, ProdutoNaoEncontradoError, ProdutoNaoExisteError, QuantidadeInvalidaError


class Estoque:
    """Gerencia o estoque de produtos."""
    def __init__(self):
        """Inicializa um novo estoque vazio."""
        self._estoque = {}

    def adicionar_produto(self, produto, quantidade):
        """Adiciona um produto ao estoque.

        Args:
            produto (str): O nome do produto.
            quantidade (int): A quantidade do produto.

        Raises:
            QuantidadeInvalidaError: Se a quantidade for menor ou igual a zero.
        """
        if quantidade <= 0:
            raise QuantidadeInvalidaError("Qunatidade deve ser maior quer zero")
        self._estoque[produto] = quantidade

    def atualizar_produto(self, produto, nova_quantidade):
        """Atualiza a quantidade de um produto no estoque.

        Args:
            produto (str): O nome do produto a ser atualizado.
            nova_quantidade (int): A nova quantidade do produto.

        Raises:
            ProdutoNaoExisteError: Se o produto não existir no estoque.
        """
        if not produto in self._estoque:
            raise ProdutoNaoExisteError("Produto não existe no estoque")

        self._estoque[produto] = nova_quantidade

    @property
    def visualizar_estoque(self):
        """Retorna o dicionário de estoque.

        Returns:
            dict: O estoque atual.

        Raises:
            EstoqueVazioError: Se o estoque estiver vazio.
        """
        if not self._estoque:
            raise EstoqueVazioError("\nEstoque vazio")
        
        return  self._estoque 

    def remover_produto(self, produto):
        """Remove um produto do estoque.

        Args:
            produto (str): O nome do produto a ser removido.

        Raises:
            ProdutoNaoEncontradoError: Se o produto não for encontrado no estoque.
        """
        if not produto in self._estoque:
            raise ProdutoNaoEncontradoError(" Produto não encontrado")
        del self._estoque[produto]
class EstoqueError(Exception):
    """Classe base para exceções de estoque."""
    pass

class EstoqueVazioError(EstoqueError):
    """Exceção para quando o estoque está vazio."""
    pass

class ProdutoNaoEncontradoError(EstoqueError):
    """Exceção para quando um produto não é encontrado."""
    pass

class ProdutoNaoExisteError(EstoqueError):
    """Exceção para quando um produto não existe no estoque."""
    pass

class QuantidadeInvalidaError(EstoqueError):
    """Exceção para quantidade de produto inválida."""
    pass
from srcs.exceptions import EstoqueError
from srcs.estoque import Estoque


def menu():
    """Exibe o menu de opções do controle de estoque.

    Returns:
        None
    """
    print("\n Controle de Estoque")
    print("\n1. Adicionar produto")
    print("2. Atualizar produto")
    print("3. Ver estoque")
    print("4. Remover produto")
    print("5. sair")

def main():
    """Função principal que gerencia o controle de estoque.

    Raises:
        ValueError: Se a opção ou quantidade não for um número válido.
        EstoqueError: Para erros relacionados à lógica de estoque.
    """
    estoque = Estoque()

    while True:
        try:
            menu()
            opcao = int(input("\nEscolha uma opção: "))
            
            if opcao == 5:
                print("Saindo...")
                break

            match opcao:
                case 1:
                    nome = input("Nome do produto: ")
                    qtd = int(input("Quantidade: "))
                    estoque.adicionar_produto(nome, qtd)
                    print("Produto adicionado com sucesso.")
                
                case 2:
                    nome = input("Nome do produto: ")
                    qtd = int(input("Nova quantidade: "))
                    estoque.atualizar_produto(nome, qtd)

                    print("Produto atualizado.")

                case 3:
                    print("\nEstoque Atual")
                    print("\n".join(f"{p} - {q}" for p, q in estoque.visualizar_estoque.items()))

                case 4:
                    nome = input("Nome do produto a remover: ")
                    estoque.remover_produto(nome)
                    print("Produto removido.")

                case _:
                    print("Opção inválida. Digite entre 1 e 5.")

        # --- TRATAMENTO DE ERROS ---

        except ValueError:
            print("Erro: Digite apenas números válidos!")
            
        except EstoqueError as erro:
            print(erro)
    
        

if __name__ == '__main__':
    main()