# TP TAA ## TP3 - TP4 ### Nous avons maintenant deux rôles : - ADMIN : correspond à l’enseignant - USER : correspond à l’étudiant Pour Keycloak, il faudrait normalement créer les utilisateurs via OAuth2. Cependant, pour ce TP, nous avons utilisé directement la base de données (BDD) pour créer les utilisateurs. ### Remarques sur les entités Pour les classes Quizz, Question et Utilisateur, nous avons testé que tout fonctionne, mais elles sont liées à Utilisateur. Cela n’a pas beaucoup de sens avec les rôles USER de Keycloak et ce n’est pas l’objectif principal du TP. ### Tests avec Insomnia Pour simplifier et se concentrer sur les fonctionnalités principales, nous avons testé les classes Session et Reponse directement via Insomnia. ### Example de token admin et user dans OAuth2 - Site web de décodage: https://www.jwt.io/ - Admin `eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg4NzksImlhdCI6MTc2MTM0ODU3OSwianRpIjoib25ydHJvOmJiYmQyM2QwLTY2ZTctMWY0NS1iNTFiLTBiZGFjNzQzZmZiMyIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiN2FjZmE3YWItNTk4ZC01ZmVlLTU0MzktYzMyNDYyYzFkM2JjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.TrxycBI76TRjSNjA7kwDNycyKjmNwhjfMnQ2xOi0hVvBqpQN-nIH6mvm3hv6FwoTCVZz9lwwS5kpn83Z4FoYZVY5oKGYsccNR77tg42Rahn1UXOuQuCs4v9W0oqClQa5PtI8loQXO9d5P3mc8uuUvO2vClnGRrky48DqGDSis30fXPY-c26TIZvIRyi_PWPSOK2i2k9w7fkWPodkkGxdaRm4Sc45hNXCA9FT8xRJhzfxJ21ynOovx2Z9y8lILqV5Q4NqjMOTlzyVwkj6vS3veXIJkHAAk8LPdHJKoPrrqQzXXsb3ZIgTl8DyF2cYcJ58vOOle91UoGuqWi1U-pJSnw` - User `eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU2MjAsImlhdCI6MTc2MTM0NTMyMCwianRpIjoib25ydHJvOjJhMGIxOGZiLWE4MjEtMWI3MS1iODQ1LWE5NGY0NWY1ZDA4MSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzFhYmVlNzYtOWJkNy02NWMyLWY0MzMtOTJiZjliODZlMDA1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.GBNldYmb4q02AaOwnu1xoLxkF_9qvadLdw1ftjetOsaDNYSe_y_9XhqmStc1ocD11AJUVr0Ix9fqB6TACoNMBS6gegSI6xmmdjT2ABqGilcpMs3OY6edNB8qZ9LP_YFK_z6UWdBBgWmETSfr9zRGVOOfLDMFwadgxCtbeV1AxGLTmfdVLCDPOlZseN3SNKHeFbC_ApYgPR-_vO1Fjl8KE8CucWULoDzgyHBdU1zqlLttlpaOQHl6aHWS0mtb4ymvQWDp7UZd-aukVb41UT5oeVtPS9HC6w2jfd4UBxG1T2TdTfazoXXk1eGgAD7ir6QyoB2Pkv9aANiRMMrTlk0C_w` #### Utilisateur Resource | Methode | URL | Description | |---------|----------------------------------------------------|----------------------------------------------------------------------------------------------| | POST | `/utilisateur/create` | Créer un utilisateur (avec aussi l'id keyloak) ("name","email et "password" dans body json) | | GET | `/utilisateur/getAll` | retourn tout les utilisateurs (id, name, email) | | GET | `/utilisateur/getSessions/{session_id}` | Retourne les sessions de l'utilisateur | | PUT | `/utilisateur/addSession/{user_id}/{session_id}` | rejoint une session à la liste de l'utilisateur | | PUT | `/utilisateur/removeSession/{user_id}/{session_id}`| quite une session à la liste de l'utilisateur | | PUT | `/utilisateur/update/{user_id}` | met à jour les info de l'utilisateur ("name","email et "password" dans body json) | | DELETE | `/utilisteur/delete/{user_id}/delete` | Supprime l'utilisateur | #### Session Resource | Methode | URL | Description | |---------|-------------------------------------------------|---------------------------------------------------------------| | POST | `/session/create` | créer une nouvelle session ("theme":String dans body json) | | GET | `/session/getAll` | Retourne la liste des sessions | | PUT | `/session/addQuizz/{session_id}/{quizz_id}` | ajoute un quizz à la session | | PUT | `/session/removeQuizz/{session_id}/{quizz_id}` | retire un quizz à la session | | PUT | `/session/update/{session_id}` | change le thème ("theme":String dans body json) | | PUT | `/session/join/{session_id}` | l'utilisateur courant (keycloak) rejout la session | | PUT | `/session/leave/{session_id}` | l'utilisateur courant (keycloak) quitte la session | | DELETE | `/session/delete/{session_id}` | Supprime la session | #### ReponseController | Methode | URL | Description | |---------|-------------------------------------------------|---------------------------------------------------------------------------| | POST | `/reponse/create/choix` | créer un objet réponse de type choix multiple | | POST | `/reponse/create/courte` | créer un objet réponse de type réponse courte | | GET | `/reponse/getAll` | affiche l'id et les réponse correct de chaque réponse | | GET | `/reponse/get/{id_reponse}` | affiche toutes les info d'un réponse | | DELETE | `/reponse/delete/{id_reponse}` | supprime un objet réponse | | PUT | `/reponse/removeReponse/{id_reponse} ` | retire une réponse correcte ("reponse" dans body json) | | PUT | `/reponse/addReponse/{id_reponse} ` | ajoute une réponse correcte ("reponse" dans body json) | | PUT | `/reponse/addChoix/{id_reponse} ` | ajoute un choix (réponse choix uniquement) ("choix":String dans body json)| | PUT | `/reponse/removeChoix/{id_reponse}` | retire un choix (réponse choix uniquement) ("choix":String dans body json)| #### Quizz Resource | Methode | URL | Description | |---------|-------------------------------------------------|----------------------------------------------------| | POST | `/quizz/create/{utilisateur_id}` | céer un nouveau quizz par associé à un utilisateur | | GET | `/quizz/getQuestions/{quizz_id}` | Retourne la list des questions d'un quizz | | GET | `/quizz/getAll` | Retourne toute la liste du quizz | | PUT | `/quizz/add_question/{quizz_id}/{question_id}` | Ajoute une nouvelle question au quizz | | PUT | `/quizz/removeQuestion/{quizz_id}/{question_id}`| Ajoute une nouvelle question au quizz | | DELETE | `/quizz/delete/{quizz_id}` | Suprrime le quizz | #### Question Resource | Methode | URL | Description | |----------|----------------------------------------------------|-----------------------------------------------------------------------| | GET | `/question` | Retourne toute la liste du question | | POST | `/question/create` | Créer une question ( "enonce":String dans body Json) | | PUT | `/question/update/{question_id}` | Change l'énoncé de la question ("enonce":String dans body JSON) | | GET | `/question/get/{question_id}` | donne toutes les infos de la question sous forme de String | | GET | `/question/getAll` | donne l'id et l'énoncé de toutes les questions sous forme de String | | GET | `/question/getReponse/{question_id}` | donne toutes les réponse correct sous forme de String | | PUT | `/question/setReponse/{question_id}/{reponse_id}` | met à null l'objet réponse à la question | | PUT | `/question/setReponse/{question_id}/{reponse_id}` | Associe un objet réponse à la question | | PUT | `/question/delet/{question_id}` | supprime la question | ## Auteurs - Tuan Minh VU - Thibaut ROCHAS