Bonjour à tous,
Je migre un projet vers Java / Spring / Spring Boot et étant débutant je ne sais pas si je vais dans le bon sens. Voici mon soucis :
Pour le moment j'ai câblé le système d'authentification (JWT, UserDetails etc.). Niveau données j'utilise les JpaRepository, @Entity etc. que je trouve bien pratique.
Dans ma BDD j'ai une table t_users ainsi qu'une table t_points qui référence un id_user(t_users.id). J'ai un utilisateur A et un utilisateur B.
J'ai fait une route /points/{id} et ma question est comment faire en sorte que ça renvoie une 404 parce que même si le point existe en BDD, c'est l'utilisateur A qui le cherche alors qu'il appartient à l'utilisateur B ?
En code j'ai ça (non testé) :
Comment je transmets le Personal.getId() pour remplir le "?" de la requête ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package com.elise.waypoint.dao; import com.elise.user.model.User; import com.elise.waypoint.model.Waypoint; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.util.Optional; public interface WaypointDao extends JpaRepository<Waypoint, Long> { @Query("SELECT p.x, p.y FROM t_points p INNER JOIN t_users u WHERE u.id = p.user_id AND u.id = ?") Optional<Waypoint> findById(Long id); }
Autre question : Est-ce qu'il n'y a pas moyen de s'en sortir en câblant toutes les entités et en les annotations relationnelles (@OneToMany, @ManyToMany, etc.) plutôt que mettre les requêtes dans le code avec @Query ? Ce sera un peu fastidieux mais au moins ça ne mélange pas l'ORM avec du DirectQuery, et j'ai le sentiment que ça utiliserai au max les capacités d'IntelliJ pour prévenir d'incohérences en codant plutôt que les déboguer à l'exécution.
Merci pour vos lumières.
A très bientôt,
Kin
Partager