'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 |
---|