Fil du groupe Applications natives dans La Ruche : nombre de membres, un bouton Publier et les deux publications les plus récentes avec leur nombre de commentaires

La Ruche

Projet académique en équipe · En développement actif

septembre à novembre 2026Équipe de 4 · 190 commits sur 376
Diagramme d'architecture : une application Android, existante, ainsi qu'un site web et une application d'administration, prévus, appellent l'API La Ruche, qui gère utilisateurs, groupes, publications et commentaires. L'API stocke ses données en mémoire aujourd'hui, passe à MariaDB au sprint 3, et s'appuiera sur un service d'identité externe prévu
Un diagramme d'architecture, pas une capture d'écran. Les cadres pleins existent aujourd'hui : l'API et son stockage en mémoire, et l'application Android, qui tourne encore sur des données simulées. Les cadres pointillés sont prévus : le site web et l'application d'administration, MariaDB au sprint 3, et un service d'identité externe pour la connexion.

Le projet

La Ruche est un forum de discussion réservé aux étudiants d'un cégep montréalais. Les discussions vivent dans des groupes : les groupes de domaine pour les cours, créés par l'administration, et les groupes d'intérêt proposés par les étudiants, qui restent en attente jusqu'à ce qu'un administrateur les approuve. Les membres publient, commentent et signalent du contenu, et chaque groupe a ses propres modérateurs et sa propre liste de bannis.

Deux équipes de quatre le construisent : une API REST FastAPI dont le fichier openapi.yml est le contrat contre lequel chaque réponse est testée, et un client Android en Kotlin selon MVP. Un site web et une application d'administration sont prévus sur la même API. L'application Android tourne encore sur des données simulées; la brancher sur l'API est la prochaine étape.

Ma contribution

Côté API, la collection des utilisateurs de bout en bout (création, consultation, filtres, modification, suppression), les tests de bout en bout des groupes et des publications, l'outil qui vérifie chaque réponse contre le contrat OpenAPI, et la mise en place de Docker et de l'intégration continue. J'ai aussi rédigé le plan de refactorisation du sprint 3. Côté Android, les écrans de publication, de nouvelle publication, de profil et des groupes rejoints, avec leurs présentateurs testés contre de fausses vues.

Le plus difficile

Le plus difficile a été la visibilité. Une même publication peut être affichée, masquée ou donner un 404 selon qui la demande : un groupe en attente ou refusé n'est visible que par son créateur et les administrateurs, un groupe supprimé que par les administrateurs, une publication supprimée que par son auteur, les modérateurs du groupe et les administrateurs. Chaque règle doit tenir sur toutes les routes qui mènent au contenu, routes imbriquées comprises, et la plupart de mes correctifs dans l'API visaient une route qui en laissait passer une, comme une publication d'un groupe supprimé encore servie.

L'inscription avait sa propre condition de course. FastAPI exécute les routes synchrones dans un pool de fils, donc deux inscriptions simultanées pouvaient toutes les deux passer la vérification d'unicité du pseudo ou du courriel. La vérification et l'écriture se font maintenant sous un même verrou, et le hachage du mot de passe, qui est lent, est fait avant de le prendre.

Ce que je changerais

Ce verrou ne protège qu'un seul processus qui garde ses données en mémoire. Avec MariaDB au sprint 3, l'unicité doit reposer sur une contrainte UNIQUE, pas sur le code applicatif. Les règles de visibilité sont aussi réécrites route par route au lieu de vivre dans une seule fonction, ce qui explique que les correctifs soient arrivés une route à la fois.

Écran Découvrir de La Ruche : un champ de recherche de groupes, les filtres Tous, Études et Intérêts, et des cartes de groupes avec leur nombre de membres et un bouton Rejoindre ou Membre
Découvrir, où l'étudiant trouve des groupes : les groupes de domaine pour les cours et les groupes d'intérêt proposés par les étudiants. Il n'est pas nécessaire de s'abonner pour publier : Rejoindre ajoute seulement le groupe à Mes groupes.
Écran d'une publication dans La Ruche : une question sur le partage de données entre fragments Android, deux commentaires avec un lien Répondre, et un champ de commentaire
Une publication et ses commentaires. Les temps relatifs comme « Il y a 2 h » sont calculés dans le présentateur plutôt que dans la vue, donc couverts par les tests unitaires.
← Tous les projets