3cn-ecn/nantralPlatform

[TICKET] Amélioration Algo Parrainage

Opened this issue · 1 comments

Description

Réécriture du module de parrainage pour l'adapter à la nouvelle interface react et simplifier le code

Database

Structure de la base de données :

  • Table GroupType : créer un nouvel élément "mentorship". Ajouter un attribut hidden_to_first_year pour indiquer que tous les groupes de ce type sont masqués aux première années ?
  • Table Group : on crée des groupes qui correspondent aux familles de parrainage
  • Table MentorshipForm : une table avec 3 fields: l'année, le formulaire (en JSON) et la phase où on est rendu pour ce parrainage
  • Table MentorshipFormFamilyAnswer : une table avec une foreign key vers un groupe, une foreign key vers un MentorshipForm, et un champ JSON avec les réponses au questionnaire
  • Table MentorshipFormUserAnswer : une table avec une foreign key vers un user/student, une foreign key vers un MentorshipForm, et un champ JSON avec les réponses au questionnaire

A faire

Définir la structure du JSON pour supporter :

  • les traductions des questions
  • les groupes de questions (BDX par exemple)
  • les coeff par question
  • les valeurs numériques associées à chaque réponse
  • si la question doit apparaître dans le questionnaire famille pour les parrains ou non, si elle doit aussi apparaître dans le questionnaire parrain dans ce cas, et quel pourcentage de chaque form appliquer pour la fusion des réponses (idée : avoir un champ faimily_coeff : s'il vaut 0, la question est uniquement user, si 1, la question est uniquement famille, et si 0.4, le score de la question est 40% du form famille et 60% du form user)
  • Documenter la structure de ce JSON sur le site de doc pour qu'il soit facilement modifiable chaque année

Gestion des permissions :

  • les familles de parrainage doivent être tout le temps visible pour les parrains
  • les familles de parrainage doivent être visible uniquement après la dernière phase pour les fillots
  • les fillots doivent pouvoir voir leurs co-fillots pendant la dernière phase
  • ne pas ajouter de champs spécifiques au parrainage dans les tables de Groupe, rester si possible le plus abstrait possible (par exemple créer un champ hidden_to_first_year sur le type qui sera mis à jour automatiquement au changement de phase, ou encore un champ max_number_of_members pour limiter le nombre de parrains par famille, qui lui aussi sera redéfini à None pour ajouter les fillots à la fin)
  • ne pas ajouter non plus de code spécifique au parrainage dans les modules relatifs au groupe, pour conserver la séparation des modules : en allant sur la page d'une famille, je n'ai aucune référence au parrainage (à part le nom du type de groupe)

Implémentation

  • Faire toutes les interfaces en React dans le front
  • Ajouter des routes API pour télécharger le form, les réponses déjà faites, les co-fillots, etc...
  • S'assurer qu'on ne fait pas leaker d'information dans l'API (elle est toujours accessible)
  • Permettre d'enregistrer le formulaire même en ne l'ayant pas terminé (il est assez long, sauvegarder les réponses à chaque page ?)

Autres notes pour le parrainage :

  • Ajouter une validation du form lorsqu'il est modifiée (vérifier qu'il contient des questions filles, inter, etc...)
  • Passer les questions sur le genre / les inter (nationalité) dans les paramètres de compte (table User/Student) pour ne pas avoir à les récupérer dans le form
  • Ne plus séparer les ITII : ils font leur parrainage à part, et sinon on relance juste un nouveau Form de parrainage
  • Ajouter un graphique pour les admins pour visualiser la répartition des coeffs (très critiquée cette année) (voir mui-x pour générer des graphes)