feat: Ajout de 28 nouvelles écoles des groupes Igensia et C&D via le service Wigor#775
feat: Ajout de 28 nouvelles écoles des groupes Igensia et C&D via le service Wigor#775kaelianbaudelet wants to merge 16 commits into
Conversation
kaelianbaudelet
left a comment
There was a problem hiding this comment.
J'ai laissé plusieurs commentaires directement dans les fichiers modifiés pour justifier mes choix sur certains éléments de code un peu spécifiques. Merci d'y jeter un coup d'œil pendant votre review, cela vous permettra de mieux comprendre la logique derrière certaines implémentations ! 🙏
| redirect({ pathname: './services/multi/credentials', options: { color: "#008DB0", university: "UPHF", url: "https://appmob.uphf.fr/backend" } }); | ||
| }, | ||
| }, | ||
| { |
There was a problem hiding this comment.
CF: Informations supplémentaires pour comprendre pourquoi j'ai séparé les écoles des groupes C&D et Igensia dans un onglet distinct au lieu de réunir dans "Autres Universités"
| name="services/appscho" | ||
| options={{ headerShown: false, title: "" }} | ||
| /> | ||
| <Stack.Screen |
There was a problem hiding this comment.
CF: Informations supplémentaires pour comprendre pourquoi j'ai séparé les écoles des groupes C&D et Igensia dans un onglet distinct au lieu de réunir dans "Autres Universités"
| "ONBOARDING_REQUIRED_FIELDS": "Required fields", | ||
| "ONBOARDING_FILL_ALL_FIELDS": "Please fill in all fields", | ||
| "ONBOARDING_APPSCHO_INSTANCE_NOT_FOUND": "Instance not found", | ||
| "ONBOARDING_WIGOR_INSTANCE_NOT_FOUND": "Instance not found", |
There was a problem hiding this comment.
Traduction temporaire avant fusion avec "Autres universités".
CF: Informations supplémentaires
| "ONBOARDING_SERVICE_ARD": "ARD", | ||
| "ONBOARDING_SERVICE_IZLY": "Izly", | ||
| "ONBOARDING_SERVICE_ALISE": "Alise", | ||
| "ONBOARDING_SERVICE_WIGOR": "Igensia / C&D school groups", |
There was a problem hiding this comment.
Traduction temporaire avant fusion avec "Autres universités".
CF: Informations supplémentaires
| "ONBOARDING_REQUIRED_FIELDS": "Champs requis", | ||
| "ONBOARDING_FILL_ALL_FIELDS": "Veuillez remplir tous les champs", | ||
| "ONBOARDING_APPSCHO_INSTANCE_NOT_FOUND": "Instance non trouvée", | ||
| "ONBOARDING_WIGOR_INSTANCE_NOT_FOUND": "Instance non trouvée", |
There was a problem hiding this comment.
Traduction temporaire avant fusion avec "Autres universités".
CF: Informations supplémentaires
| MULTI, | ||
| ALISE, | ||
| APPSCHO, | ||
| WIGOR = 999 // TODO: supprimer le "= 999" une fois qu'une solution a été trouvée pour éviter le conflit avec l'ID 9 (LANNION) qui provoque une déconnexion automatique dans useHomeData.ts |
There was a problem hiding this comment.
CF: Informations supplémentaires pour comprendre pourquoi j'ai fait cà avec l'identifiant vis à vis du problème de l'issue #773.
| return require("@/assets/images/ecoledirecte.png") | ||
| case Services.ALISE: | ||
| return require("@/assets/images/alise.jpg") | ||
| case Services.WIGOR: |
There was a problem hiding this comment.
Ici je défini Wigor comme service pour qu'on vois bien Wigor dans l’écran "Services et cartes",
Hors-sujet PR :
J'ai constaté une petite anomalie d'affichage pour les comptes AppScho en travaillant sur Wigor. Dans la section "Services et cartes", ces comptes héritent du nom "Pronote" par défaut, le provider manquant actuellement dans le helper dédié.
Rien de bloquant pour cette PR : je formaliserai ça dans une issue GitHub distincte une fois le chantier Wigor terminé ! ^^
| case Services.ALISE: | ||
| return "#108ED1" | ||
| case Services.WIGOR: | ||
| return "#1E3035" |
There was a problem hiding this comment.
Mis pour la forme, mais cette couleur ne sera jamais visible à l'écran
| "@sbaiahmed1/react-native-blur": "^4.2.1", | ||
| "@shopify/flash-list": "2.0.2", | ||
| "@shopify/react-native-skia": "2.4.18", | ||
| "@studentsphere/linkgor": "^1.0.3", |
There was a problem hiding this comment.
Note
L'intégration du provider Wigor s'appuie sur le wrapper léger @studentsphere/linkgor développé pour l'occasion.
- Documentation complète : linkgor.studentsphere.app/docs.
- Code source : studentsphere-app/linkgor
| let planningPromiseCache: Promise<Lesson[]> | null = null; | ||
| let cachedPlanning: Lesson[] | null = null; | ||
| let lastFetchTime = 0; | ||
| const CACHE_TTL = 5 * 60 * 1000; |
There was a problem hiding this comment.
L'API Wigor (backend .NET/C# ws-edt-cd.wigorservices.net/Home/Get) étant particulièrement lente, avec 3 à 4 secondes de temps de réponse systématiques, les requêtes brutes à la volée ne sont pas viables. Sans mécanisme de cache, la navigation ou le simple scroll sur l'emploi du temps relançait des appels réseau toutes les secondes. En plus de surcharger leur serveur, cela provoquait de grosses "race conditions" côté interface, où les cours apparaissaient et disparaissaient de façon très instable selon l'ordre d'arrivée des requêtes en retard.
Pour résoudre ce problème, j'ai mis en place un cache en mémoire de 5 minutes couplé à un système de déduplication des promises. Du coup... Si plusieurs requêtes sont déclenchées en même temps par l'application, une seule requête réseau est réellement envoyée.
Cette PR introduit le support du provider Wigor, permettant d'intégrer d'un coup 28 nouvelles écoles du supérieur issues des réseaux Igensia Éducation et Compétences & Développement sur 🦋 Papillion.
Wigor Services est un réseau d'applications développé en interne par les groupes Igensia Éducation et Compétences & Développement. Il centralise l'ensemble des ressources pédagogiques et de gestion de la vie scolaire des étudiants (emplois du temps, notes, absences, etc.) au sein d'un écosystème logiciel et accessible via un système d'authentification unique (CAS).
Règles de contribution
Caution
Afin de garantir une application stable et pérenne dans le temps, nous t'invitons à vérifier que tu as bien respecté les règles de contribution. Sans cela, ta Pull Request ne pourra pas être examinée.
Captures d'écran
Émulateur IOS (iPhone 17 Pro Max, iOS 26.4)
Émulateur Android (Google Pixel 9 Pro XL, Android 17)
Résumé des changements
Note
Cette Pull Request introduit l'intégration complète du service Wigor pour les groupes d'écoles Igensia et Compétences et Développement. Cela permet aux étudiants de 28 établissements d'accéder directement à leur emploi du temps via l'application Papillon.
Voici la liste des composants ajoutés et modifiés :
Nouveaux fichiers de service (Wigor)
services/wigor/refresh.tsJ'ai créé le renouvellement de session pour éviter les déconnexions en m'inspirant de services/appscho/refresh.ts
services/wigor/timetable.tsJ'ai codé la récupération et le parsing de l'emploi du temps en m'inspirant de services/appscho/timetable.ts
services/wigor/index.tsxJ'ai créé le point d'entrée principal du service Wigor en m'inspirant de services/appscho/index.ts
Flux d'onboarding spécifique
app/(onboarding)/services/wigor/_layout.tsxJ'ai structuré la navigation propre à Wigor en m'inspirant de app/(onboarding)/services/appscho/_layout.tsx
app/(onboarding)/services/wigor/list.tsxJ'ai fait l'interface pour lister les écoles de l'instance en m'inspirant de app/(onboarding)/services/appscho/list.tsx
app/(onboarding)/services/wigor/credentials.tsxJ'ai créé l'écran de saisie des identifiants en m'inspirant de app/(onboarding)/services/appscho/credentials.tsx
Modifications des fichiers existants (Intégration)
package.jsonJ'ai ajouté mon wrapper pour Wigor @studentsphere/linkgor comme dépendance du projet.
package-lock.jsonservices/shared/index.tsJ'ai enregistré le service Wigor pour l'initialiser dans le manager
services/shared/types.tsJ'ai rajouté Wigor aux types des plugins de services scolaires
stores/account/types.tsJ'ai intégré Wigor à l'énumération globale des services
utils/services/helper.tsJ'ai configuré l'affichage du nom de la couleur et du logo pour Wigor
locales/en.jsonJ'ai rajouté les traductions en anglais pour l'onboarding de Wigor
locales/fr.jsonJ'ai rajouté les traductions en français pour l'onboarding de Wigor
app/(onboarding)/_layout.tsxJ'ai configuré les chemins de navigation pour les écrans Wigor
app/(onboarding)/utils/constants.tsxJ'ai listé "Groupes d'écoles Igensia / C&D" dans les choix d'universités au démarrage (CF: Informations supplémentaires pour plus d'info sur la non fusion avec "Autres Universités")
Ressources graphiques
Liste complète des établissements ajoutés
L'intégration de Wigor apporte le support pour les 28 écoles du groupe Igensia et C&D.
3a3a.webpamerican-business-collegeabcp.webpbusiness-science-institutebsi.webpcnvacnva.webpecmecm.webpemiemi.webpepsiepsi.webpesaesa.webpesailesail.webpesamesam.webpicd-business-schoolicd.webpiclicl.webpidrac-business-schoolidrac.webpieftieft.webpietiet.webpifagifag.webpigefiigefi.webpigensia-rhigensiarh.webpihedreaihedrea.webpileriileri.webpimisimis.webpimsiimsi.webpipiipi.webpiscpaiscpa.webpismmismm.webpsup-de-comsupdecom.webpviva-mundivivamundi.webpwiswis.webpChacune de ces écoles est déclarée dans le module
@studentsphere/linkgorvia constants.ts.Comment se connecter
Capacités du service
Note
💡 Note d'évolution future :
L'API Wigor pour le groupe Compétences et Développement (C&D) est actuellement assez limitée en termes de fonctionnalités. Pour pallier cela à l'avenir, je réfléchis à implémenter d'autres services complémentaires (comme Edusign pour récupérer la liste des absences/présences, ou un service dédié pour les Actualités).
À l'inverse, "l'herbe est plus verte" du côté d'Igensia où le portail Wigor est plus exhaustif et propose déjà des modules comme les notes. Tout cela est encore à l'étude et fera l'objet d'évolutions futures une fois cette base solide mergée...
Informations supplémentaires
Cette PR fait suite à l'issue de feature request #774.
J'ai dû attribuer temporairement l'ID
999à Wigor dansstores/account/types.tsau lieu de l'ID9initialement prévu.Pourquoi ce changement ?
L'ID
9est actuellement utilisé en dur dans le hookuseHomeData.tspour identifier et déconnecter automatiquement les anciens comptes qui utilisaient le service IUT de Lannion.Si on laisse Wigor sur l'ID
9:IUT de Lannion.Solution à terme :
C'est un workaround temporaire pour permettre de tester et d'utiliser Wigor sans casser l'expérience utilisateur. J'ai ouvert une issue GitHub (#773) pour signaler ce problème. À terme, il faudra refactoriser la gestion des déconnexions pour ne plus dépendre d'IDs magiques codés en dur.
Le problème mentionné relatif à la suppression du service
IUT de Lannionest décrit dans l'issue #773.Vous remarquerez que j'ai créé un onglet séparé pour Wigor appeler "Groupes d'écoles Igensia / C&D" au lieu de le fusionner dans "Autres Universités".
En réalité, l'onglet "Autres Universités" est techniquement lié à Appscho. Pour éviter de casser l'existant avec un changement d'envergure trop risqué, j'ai préféré dupliquer temporairement la logique pour lister les 28 nouvelles écoles proprement de mon côté.
Comme discuté avec @raphckrman sur Discord via 1511873274668122142, le but à terme est d'unifier tout ça sous une vue globale avec des filtres (Universités, Écoles, IUT...). Deux options s'offrent à nous :
Ressources
Cette intégration du service Wigor s’appuie sur Linkgor
@studentsphere/linkgor: https://linkgor.studentsphere.app/docs@studentsphere/linkgor: https://github.com/studentsphere-app/linkgorIGENSIA Education
Compétences & Développement
De mon côté, j'ai essayé de faire ça le plus proprement possible ! 🫡
Pour éviter de réinventer la roue (et surtout pour éviter de faire n'importe quoi 😅), j'ai gardé le nez dans le code d'Appscho pour m'en servir de modèle pour Wigor et pour le wrapper Linkgor.
Vive Papillon ! 🦋