119 lines
5.9 KiB
Markdown
119 lines
5.9 KiB
Markdown
# 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 serveur est lancé, on a testé des appels API avec Insomnia et interface Swagger est accessible via:
|
||
`http://localhost:8080/api`
|
||
|
||
#### 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
|