1
resposta

Bug nas classes services

Ao executar a classe principal SpringDataApplication.java e acessar a opção 2 - Funcionario e tentarmos sair das opções de Funcionário ao digitarmos 0 (zero) alteramos a variável private Boolean system para false, porém ao voltarmos no menu principal não é possível entrar na opção** 2 - Funcionario**, pois o estado da variável continua sendo false e o valor true somente é atribuído na declaração da variável.

Uma opção seria alterar a declaração da variável como private Boolean system; e dentro do método inicial public void inicial(Scanner scanner) atribuirmos o valor para true (system = true;). Assim garantimos que todas as vezes que acessarmos a opção 2 - Funcionario e alterarmos o estado para false, garantimos que possamos visualizar as opções de funcionário e não entrarmos num loop do menu principal.

Obs: Esse mesmo bug ocorre em todas as classes de service

Classe com bug:

@Service
public class CrudFuncionarioService {

    private Boolean system = true; //bug
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    private final CargoRepository cargoRepository;
    private final FuncionarioRepository funcionarioRepository;
    private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;


    public CrudFuncionarioService(FuncionarioRepository funcionarioRepository, 
            CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
        this.cargoRepository = cargoRepository;
        this.funcionarioRepository = funcionarioRepository;
        this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
    }

    public void inicial(Scanner scanner) {
        while(system) {
            System.out.println("Qual acao de funcionario deseja executar");
            System.out.println("0 - Sair");
            System.out.println("1 - Salvar");
            System.out.println("2 - Atualizar");
            System.out.println("3 - Visualizar");
            System.out.println("4 - Deletar");

            int action = scanner.nextInt();

            switch (action) {
            case 1:
                salvar(scanner);
                break;
            case 2:
                atualizar(scanner);
                break;
            case 3:
                visualizar(scanner);
                break;
            case 4:
                deletar(scanner);
                break;
            default:
                system = false;
                break;
            }

        }

    }

    //métodos

}

Classe corrigida:

@Service
public class CrudFuncionarioService {

    private Boolean system;  //correção do bug
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    private final CargoRepository cargoRepository;
    private final FuncionarioRepository funcionarioRepository;
    private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;


    public CrudFuncionarioService(FuncionarioRepository funcionarioRepository, 
            CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
        this.cargoRepository = cargoRepository;
        this.funcionarioRepository = funcionarioRepository;
        this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
    }

    public void inicial(Scanner scanner) {
            system = true; //correção do bug
        while(system) {
            System.out.println("Qual acao de funcionario deseja executar");
            System.out.println("0 - Sair");
            System.out.println("1 - Salvar");
            System.out.println("2 - Atualizar");
            System.out.println("3 - Visualizar");
            System.out.println("4 - Deletar");

            int action = scanner.nextInt();

            switch (action) {
            case 1:
                salvar(scanner);
                break;
            case 2:
                atualizar(scanner);
                break;
            case 3:
                visualizar(scanner);
                break;
            case 4:
                deletar(scanner);
                break;
            default:
                system = false;
                break;
            }

        }

    }

    //métodos

}
1 resposta

Nossa, eu não tinha reparado neste problema, boa percepção.