rdswithapirest icon indicating copy to clipboard operation
rdswithapirest copied to clipboard

Algumas Observações sobre o Projeto.

Open claudioneves1981 opened this issue 1 year ago • 1 comments

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.

claudioneves1981 avatar Apr 21 '23 00:04 claudioneves1981

Perfeito, obrigada Claudio!

julianazanelatto avatar Aug 07 '23 21:08 julianazanelatto