# TP TAA ## TP2 Partie API REST ### Compte rendu Dans ce TP REST, nous avons implémenté les éléments suivants: - Mapper pour convertir les entités vers les DTO et inversement - Lombok afin de simplifier le code et éviter le code boilerplate (getters, setters, constructeurs, etc.) - API REST pour exposer les différentes ressources - Swagger UI pour documenter et tester facilement toutes les méthodes de l’API. - DTO (Data Transfer Objects) afin d’éviter les problèmes de boucle infinie liés aux relations bidirectionnelles entre entités. #### Execution du projet Recharger les dépendances Maven : `mvn clean install` Lancer la base de données (Linux) : `./run-hsqldb-server.sh` Lancer le serveur par fichier `src/main/java/fr.istic.taa.jaxrs/RestServer.java` Après le lancement du serveur, on a testé des appels API avec Insomnia et l'interface Swagger est accessible via: http://localhost:8080/api Seuls Utilisateur et Question sont fonctionnels, il reste quelques problèmes sur le reste. #### Diagramme de classe ```mermaid classDiagram Utilisateur "*" -- "*" Session Session "*" -- "*" Quizz Quizz "1" -- "1..*" Question Utilisateur "1" -- "*" Quizz Question "1" -- "1" Reponse Reponse <|-- ReponseCourte Reponse <|-- Choix class Utilisateur { -id : int -name : String -session : List<Session> -email : String -password : String -quizzs : String } class Session{ -id : int -codePIN : int -quizzs : List<Quizz> -utilisateurs : List<Utilisateur> -theme : String } class Quizz{ -session: Session -id : int -createur: Utilisateur } class Reponse{ -id : int -question: Question -reponses : ArrayList<String> } class Choix{ -choix : ArrayList<String> } class ReponseCourte{ } class Question{ -id : int -enonce : String -reponse: Reponse } ``` ##### Utilisateur Resource | Methode | URL | Description | |---------|---------------------------------------------------|-------------------------------------------------------| | GET | `/utilisateur` | Retourne toute la liste de l'utilisateur | | POST | `/utilisateur/register` | S'incrire nouveaux utilisateur | | GET | `/utilisateur/login` | Se connecter | | GET | `/utilisateur/{id}` | Retourne l'utilisateur par id | | GET | `/utilisateur/{user_id}/session` | Retoune la liste de session que l'utilisateur attends | | PUT | `/utilisateur/{user_id}/add_session/{session_id}` | Ajoute un nouveau session à la liste de l'utilisateur | | DELETE | `/utilisteur/{user_id}/delete` | Supprime l'utilisateur | ##### Session Resource | Methode | URL | Description | |---------|--------------------------------------|------------------------------------| | GET | `/session` | Retourne toute la liste du session | | GET | `/session/{id}` | Retourne la session par id | | GET | `/session/{session_id}/quizzs` | Retourne la liste de quizzs | | GET | `/session/{session_id}/utilisateurs` | Retourne la liste de l'utilisateur | | DELETE | `/session/{session_id}/delete` | Supprime la session | ##### Quizz Resource | Methode | URL | Description | |---------|------------------------------------------------|-----------------------------------------| | GET | `/quizz` | Retourne toute la liste du quizz | | GET | `/quizz/{quizz_id}/questions` | Retourne toutes questions du quizz | | GET | `/quizz/{quizz_id}/add_question/{question_id}` | Ajoute une nouvuelle question au quizz | | DELETE | `/quizz/{quizz_id}/delete` | Suprrime le quizz | | PUT | `/quizz/{quizz_id}/deleteQ` | Supprime toute les questions de quizz | ##### Question Resource | Methode | URL | Description | |----------|----------------------------------------------------|-----------------------------------------------------------------------| | GET | `/question` | Retourne toute la liste du question | | POST | `/question/addQuestion` | Créer une question | | PUT | `/question/{question_id}/changeQuestion` | Change l'énoncé de la question | | GET | `/question/{question_id}/getReponse` | retourne l'objet Reponse | | DELETE | `/question/{question_id}/deletReponses` | supprime toute les réponse correct | | PUT | `/question/{question_id}/addReponse` | Ajoute une réponse à Reponse | | PUT | `/question/{question_id}/setReponse/choix` | créer un nouvel objet Reponse de type Choix pour la question | | PUT | `/question/{question_id}/setReponse/reponseCourte` | créer un nouvel objet Reponse de type reponse courte pour la question | | PUT | `/question/{question_id}/addChoix` | rajoute un choix si Reponse est de type Choix | ## Auteurs - Tuan Minh VU - Thibaut ROCHAS