Retornar a lista de um repository no Controller

Bom dia, pessoal. Estou tentando retornar uma lista que esta dentro de um Repository no meu controller mas nao estou conseguindo, alguem poderia me ajudar?

Repository

@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;
    }

}

Service

@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);
    }

}

Mostra como está a sua classe controller?

Editei o post.

É importante detalhar o pq não está conseguindo fazer algo. Dá algum erro ou a requisição não está devolvendo corretamente? A aplicação está subindo corretamente?

Onde o DispenserService está sendo usado?

1 curtida

Por enquanto, o DispenserService esta sendo utilizado nos testes unitarios, o problema esta sendo na hora de construir a logica do endpoin que retornaria essa lista. Do restante, a aplicacao sobe corretamente. Perdao pela falta de clareza.