rdswithapirest
rdswithapirest copied to clipboard
Algumas Observações sobre o Projeto.
Olá tudo bem , eu fiz o Bootcamp DIO Pan e fiz o modulo do RDS com HATEOAS , conclui o projeto e gostei muito das aulas porém quero pontuar alguns pontos, a primeira observação foi no LoadDBHateoas.java No codigo feito em aula nos videos vc colocou a anotação @Autowired quando estava mostrando o loadOrder, na verdade a anotação e @Bean por isso não funcionou no video, onde vc acbou juntando os dois num mesmo metodo. Eu fiz dessa forma abaixo e funcionou muito bem.
@Configuration
public class LoadDBHateoas {
private static final Logger log = LoggerFactory.getLogger(LoadDBHateoas.class);
@Bean
CommandLineRunner loadEmployees(EmployeeRepositoryHateoas employeeRepositoryHateoas){
return args -> {
log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Claudio","ADMIN","Rua jupi 215")));
log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Clovis","USERS","Avenida Joao Dias, 3000")));
};
}
@Bean
CommandLineRunner loadOrder(OrderRepositoryHateoas orderRepository){
return args -> {
orderRepository.save(new OrderHateoas(Status.COMPLETED, "Completo"));
orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
orderRepository.findAll().forEach(order -> {
log.info("Preloaded" + order);
});
};
}
}
Outro ponto foi nos controllers de Order e Employee
no seu codigo vc cria uma Exception para Employee e Order, porém ao fazer validações via postman com get quando dava que não foi encontrado o postman não exibia nenhuma mensagem personalizada. somente quando se fazia uma alteração via PUT com id invalido, verifiquei que no seu codigo vc não colocou o orElseThrow apontado para a Exception personalizada nos GetMappings vc apenas chamou o status httpStatus.NOT_FOUND , além disso o Optional não seria necessário usando com orElseThrow, evitando o if e reduzindo codigo. Na minha implementação fiz dessa forma.
@GetMapping("/employee/{id}")
public ResponseEntity<EmployeeHateoas> consultByID(@PathVariable Long id){
EmployeeHateoas employee = repositoryEmployee.findById(id).orElseThrow(() -> new EmployeeNotFoundExceptionHateoas(id));
employee.add(linkTo(methodOn(EmployeeControllerHateoas.class).listOfEmployeeAll()).withRel("All employees"));
return new ResponseEntity<>(employee, HttpStatus.OK);
}
funciona bem e exibe a mensagem de erro de employee not found. o mesmo feito com order.
@GetMapping("orders/{id}")
ResponseEntity<OrderHateoas> consultOneOrder(@PathVariable Long id){
OrderHateoas order = repositoryOrder.findById(id).orElseThrow(()-> new OrderNotFoundExceptionHateoas(id));
order.add(linkTo(methodOn(OrderControllerHateoas.class).consultOrderAll()).withRel("All orders"));
return new ResponseEntity<>(order,HttpStatus.OK);
}
Espero ter contribuido de alguma forma. Abraços.
Perfeito, obrigada Claudio!