Retornar a lista de um repository no Controller

4 respostas
springprogramação
S

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

}

4 Respostas

Jonathan_Medeiros

Mostra como está a sua classe controller?

S

Editei o post.

Lucas_Camara

É 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?

S

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.

Criado 5 de maio de 2022
Ultima resposta 5 de mai. de 2022
Respostas 4
Participantes 3