Na video aula "Mostrando os Pedidos do Usuário" o professor menciona no vídeo que não seria possível criar os métodos de busca por Usuário ou por Status, mas eu lembrando das aulas de Spring Data lembrei que existiam sim métodos, usando essa documentação é possível muitas opções: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
Sendo assim minha classe do PedidoRepository ficou assim e funcionou muito bem:
@Repository
public interface PedidoRepository extends JpaRepository<Pedido, Long> {
List<Pedido> findByStatus(StatusPedido status);
List<Pedido> findByUser(User usuario);
List<Pedido> findByUserAndStatus(User usuario, StatusPedido status);
}
E eu inicialmente chamei assim no Controller:
@Autowired
private PedidoRepository pedidoRepository;
@Autowired
private UserRepository userRepository;
@GetMapping
public String home(Model model, Principal principal) {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
User usuario = userRepository.findByUsername(username);
List<Pedido> pedidos = pedidoRepository.findByUser(usuario);
model.addAttribute("pedidos", pedidos);
return "home";
}
@GetMapping("/{status}")
public String porStatus(@PathVariable("status") String status, Model model) {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
User usuario = userRepository.findByUsername(username);
List<Pedido> pedidos = pedidoRepository.findByUserAndStatus(usuario, StatusPedido.valueOf(status.toUpperCase()));
model.addAttribute("pedidos", pedidos);
model.addAttribute("status", status);
return "home";
}
É interessante fazer queries na mão também mas nesse caso eu acho que não haveria necessidade mesmo. O curso é ótimo de qualquer forma mas o poder da Spring Data JPA é bem maior do que aparenta.
Uma coisa que eu não entendi é a forma como a query ficou automatizada pelo Hibernate:
Hibernate: select pedido0_.id as id1_0_, pedido0_.data_da_entrega as data_da_2_0_, pedido0_.descricao as descrica3_0_, pedido0_.nome_produto as nome_pro4_0_, pedido0_.status as status5_0_, pedido0_.url_imagem as url_imag6_0_, pedido0_.url_produto as url_prod7_0_, pedido0_.user_username as user_use9_0_, pedido0_.valor_negociado as valor_ne8_0_ from pedido pedido0_ where pedido0_.user_username=? and pedido0_.status=?
Nesse caso não parece ser realmente o SQL puro pois precisaria fazer referência a tabela "users" certo?