- Présentation du projet
- Diagramme de cas d'utilisation
- Diagramme de classe
- Modèle conceptuel de données
- Evolutivité de la modélisation
- L'API, les droits d'accès
- La génération des questionnaires et de formations adaptées
- Structuration front end
- Conclusion
- Démo
L’idée de ce projet est de permettre aux élèves pilotes d’approfondir leurs compétences dans certains sous domaines comme la météorologie, la navigation et d’autres. L’application permet d'évaluer les compétences des élèves et de leurs proposer automatiquement un parcours de formation en adéquation avec les compétences acquises et non acquises.
L’application est divisée en deux parties, la gestion de la partie back-end sera réalisée en Java EE développé sous la forme de service REST, la partie front-end est réalisée en ReactJS et communique avec l’API Jakarta. L’API permet de gérer toutes les données relatives à l’application et communique directement avec la base de données.
Les différents diagrammes font l'œuvre d’une modélisation non exhaustive. Étant un projet en version alpha, celui-ci sera amené à évoluer.
Premièrement, concernant la partie graphe, il peut-être intéressant de gérer la modélisation du côté des compétences uniquement, en revoyant la gestion des versions d’un graphe également.
Concernant la partie questionnaire, le projet actuel génère un unique questionnaire pour proposer une formation, proposer des questionnaires en cours et en fin de formations pourrait permettre d’évaluer les compétences de l’élève pilote au cours de son apprentissage mais aussi de pouvoir le proposer de nouvelles formations il faiblit sur une ou plusieurs de ses compétences. L’idée de proposer d’autre forme de question pourrait voir le jour, pour le moment chaque question possède quatre propositions de réponses avec une seule bonne réponse, nous pouvons très simplement rajouter la possibilité d’avoir plusieurs bonnes réponses, des questions avec des annexes ou même proposer des questions interactives.
Les formations ne sont pas encore implémentées, une fois le questionnaire d'entrée fini, l’utilisateur doit se voir proposer une formation. Cette finition sera apportée au projet par la suite.
Type | URL | Description | Accès |
GET | /user/read/{count}/{startAt} | Retourne un nombre d’utilisateur à partir de l’index {startAt} | Utilisable uniquement par l’application |
GET | /user/read/{idUser} | Retourne l’utilisateur correspondant à {idUser} | Utilisable uniquement par l’application |
POST | /user/login | Permets la connexion d’un utilisateur | Tout le monde |
PUT | /user/register | Permets l’inscription d’un utilisateur | Tout le monde |
POST | /user/update | Permets la modification d’un utilisateur | Tout le monde |
DELETE | /skill/remove/{idSkill}/idUser | Supprime une compétence correspondant à {idSkill} si l’utilisateur en possède les droits | Utilisable uniquement par l’application |
GET | /skill/read/{idSkill} | Retourne la compétence correspondante à {idSkill} | Utilisable uniquement par l’application |
POST | /skill/update | Permets la modification d’une compétence | Formateur |
PUT | /skill/add | Permets l’ajout d’une compétence | Formateur |
GET | /skill/read/all | Retourne toutes les compétences | Formateur |
DELETE | /question/remove/{idQuestion}/{idUser} | Permets la suppression d’une question correspondant à {idQuestion} si l’utilisateur en possède les droits | Formateur |
GET | /question/read/{count}/{startAt} | Retourne un nombre de questions à partir de l’index {startAt} | Utilisable uniquement par l’application |
GET | /question/read/{idQuestion} | Retourne la question correspondant à {idQuestion} | Formateur |
PUT | /question/add | Permets l’ajout d’une question et de ses propositions | Formateur |
POST | /question/update | Permets la modification d’une question | Formateur |
GET | /proposal/read/{idQuestion} | Retourne les propositions de la question correspondant à {idQuestion} | Utilisable uniquement par l’application |
PUT | /subdomain/add | Permets l’ajout d’un sous-domaine | Formateur |
DELETE | /subdomain/remove/{idSubdomain}/{idUser} | Permets la suppression des compétences liée à un sous-domaine | Formateur |
POST | /subdomain/update | Permets la modification d’un sous-domaine | Formateur |
GET | /subdomain/read/{count}/{startAt} | Retourne un nombre de sous-domaine à partir de l’index {startAt} | Utilisable uniquement par l’application |
GET | /subdomain/read/{idSubdomain} | Retourne un sous-domaine correspondant à {idSubdomain} | Utilisable uniquement par l’application |
GET | /graph/global | Retourne les noeuds du graphe de compétences et ses arcs | Tout le monde |
DELETE | /user/{idUser}/remove/all | Retire toutes les compétences choisis par un utilisateur | Tout le monde |
PUT | /user/{idUser}/add/all | Ajoute toutes les compétences à un utilisateur | Tout le monde |
PUT | /user/{idUser}/skill/addBySubdomainId/{idSubdomain} | Ajoute toutes les compétences d’un sous-domaine correspondant à {idSubdomain} à un utilisateur | Tout le monde |
DELETE | /user/{idUser}/skill/remove/{idSkill} | Retire la compétence correspondant à {idSkill} de l’utilisateur {idUser} | Tout le monde |
PUT | /user/{idUser}/skill/add/{idSkill} | Ajoute la compétence correspondant à {idSkill} à l’utilisateur {idUser} | Tout le monde |
POST | /questionnary/response/{idUser}/qId/{idQuestion}/rId/{idProposal} | Enregistre la question comme étant répondu par l’utilisateur | Utilisable uniquement par l’application |
GET | /questionnary/getQuestion/{idUser}/{difficulty} | Retourne une question de difficulté {difficulty} en fonction des compétences choisis de l’utilisateur {idUser} | Utilisable uniquement par l’application |
Le but du questionnaire est de pouvoir attribuer à chaque compétence que l’utilisateur aura au préalable sélectionné un score positif ou nul. Pour cela, la génération des questionnaires est entièrement contrôlée par l’API. En effet, celle-ci génère des questions à poser à l’utilisateur en se basant sur les compétences choisies. En appelant la requête permettant d’acquérir une question, l’API retourne une question au hasard appartenant à une ou des compétence(s) de l’utilisateur. De plus, elle ne se limite pas à un choix hasardeux. En effet, elle ne compte que le/les compétence(s) dont le malus est strictement inférieur à 10 et dont l’erreur successive est strictement inférieure à 4 (Le malus étant un entier naturel incrémenté lorsqu’une réponse à une question est fausse. L’erreur successive quant à elle est un entier naturel représentant le nombre de fois où l’utilisateur se trompe à répétition à une compétence).
Si la réponse à une question est fausse, le questionnaire octroie un malus égal à 4 soustrait par la difficulté de la question posée (4 représentant la difficulté maximale des questions pouvant être posées). Si la réponse est fausse, le questionnaire va incrémenter l’erreur successive correspondant à la compétence examinée de 1.
Pour chaque bonne réponse à une question d’une compétence de l’utilisateur, la difficulté des questions posées est incrémentée de 0.5 et le score est incrémenté d’un montant égal à la difficulté de la question.
La limite d’un questionnaire est donc fixée sur les erreurs commises par l’utilisateur. Moins il fera d’erreur, plus le questionnaire durera longtemps et deviendra difficile. A contrario, plus il fait d'erreurs, plus le questionnaire sera court. Ainsi, les formations proposées à l’utilisateur à la suite du questionnaire seront proposées dans l’ordre ascendant des résultats de ses compétences.
Image structure front end
Les composants constituent les éléments réutilisables de l’application contenant leurs propres logiques, ils sont indépendant l’un de l’autre, sauf pour les sous-composants - les composants utilisables dans un composant - comme le composant “Form” qui est composé de composant “InputFloating”
Les vues constituent les différentes pages de l’application et sont agrégées de multiples composants, les pages incorpore le contexte AuthContext pour identifier l’utilisateur.
Les contextes constituent les états globaux de l’application notamment l’authentification permettant d’identifier l’utilisateur connecté. Les contextes sont utilisés par les Vues.
Les routes accessibles sont décrites dans “App.js”.
Ce projet nous à permis de travailler en équipe et d’utiliser une méthode adaptée pour le travail d’équipe, l’utilisation de la méthode agile pour la gestion du projet et de git pour le versionning du projet par exemple.