'Return to the list of a repository in Controller

I'm trying to return a list that is inside a Repository in my controller, but I'm not getting it. Could someone help me?

This is a RESTapi for an ATM project that I am doing for training my code. I'm using Spring Boot, Java, JUnit and Mockito. The dispenser starts with some values, however when calling the GET method, some notes are removed.

Repository

I created a list here, but I can't call it from the controller like a made with other repositories. The dispenser is created

@Repository
public class DispenserRepository {
    private List<Cedula> notasDisponiveis;

    public DispenserRepository() {
        notasDisponiveis = new ArrayList<>();
        notasDisponiveis.add(new Cedula(5, TipoNota.NOTAS_100));
        notasDisponiveis.add(new Cedula(7, TipoNota.NOTAS_50));
        notasDisponiveis.add(new Cedula(2, TipoNota.NOTAS_20));
        notasDisponiveis.add(new Cedula(5, TipoNota.NOTAS_10));
    }

    public List<Cedula> buscarNotasDispenser() {
        return notasDisponiveis;
    }

}

SaqueService

@Service
public class SaqueService {

    private static final Logger LOGGER = LoggerFactory.getLogger(SaqueService.class);
    private final DispenserService dispenser;

    public SaqueService(DispenserService dispenser) {
        this.dispenser = dispenser;
    }

    public List<CedulaDTO> sacarCedulas(Integer valor) throws ValorIndisponivelException, NumeroDeNotasIndisponivelException {

        List<CedulaDTO> cedulaDTOSList = buscarDistribuicaoDeCedulas(valor);
        atualizarDispenser(cedulaDTOSList);
        return cedulaDTOSList;
    }

DispenserService

@Service
public class DispenserService {

    private List<Cedula> notasDisponiveis;
    private final DispenserRepository dispenserRepository;

    public DispenserService(DispenserRepository dispenserRepository) {
        this.dispenserRepository = dispenserRepository;
    }

    private void buscarNotasDispenser() {
        notasDisponiveis = dispenserRepository.buscarNotasDispenser();
    }

    public Optional<Cedula> buscarCedulaDoTipo(TipoNota tipoNota) {
        if (notasDisponiveis == null || notasDisponiveis.isEmpty()) {
            buscarNotasDispenser();
        }
        return notasDisponiveis
                .stream()
                .filter(cedula -> cedula.getNota().equals(tipoNota))
                .findFirst();
    }


    public void atualizarRetiraDeCedulas(TipoNota tipoNota, Integer quantidade) throws CedulaIndisponivelException, NumeroDeNotasIndisponivelException {
        Optional<Cedula> cedulaOptional = buscarCedulaDoTipo(tipoNota);

        if (cedulaOptional.isPresent()) {
            cedulaOptional.get().retirarEstoque(quantidade);
        } else {
            throw new CedulaIndisponivelException("Cedula não encontrada!");
        }

    }

    public List<Cedula> buscarNotasEmEstoque() {
        if (notasDisponiveis == null || notasDisponiveis.isEmpty()) {
            buscarNotasDispenser();
        }
        return notasDisponiveis
                .stream()
                .filter(cedula -> cedula.getQuantidadeDisponivel() > 0)
                .collect(Collectors.toList());
    }
}

Model

@Getter
@EqualsAndHashCode
public class Cedula {
    private Integer quantidadeDisponivel;
    private TipoNota nota;

    public Cedula(Integer quantidadeDisponivel, TipoNota nota) {
        this.quantidadeDisponivel = quantidadeDisponivel;
        this.nota = nota;
    }

    public void retirarEstoque(Integer quantidade) throws NumeroDeNotasIndisponivelException {
        if (quantidadeDisponivel < quantidade) {
            throw new NumeroDeNotasIndisponivelException("Número de notas indisponível!");
        }
        quantidadeDisponivel = quantidadeDisponivel - quantidade;
    }
}

Controller

@CrossOrigin
@RestController
@RequestMapping("/sacar")
public class SaqueController {

    private final SaqueService saqueService;

    public SaqueController(SaqueService saqueService) {
        this.saqueService = saqueService;
    }

    @ResponseStatus(HttpStatus.OK)
    @GetMapping("/{valor}")
    public ResponseEntity<?> retornaQuantidadeDeNotas(@PathVariable("valor") Integer valor) throws ValorIndisponivelException, NumeroDeNotasIndisponivelException {
        return new ResponseEntity<>(saqueService.sacarCedulas(valor), HttpStatus.OK);
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source