GeoNature-citizen
Portail de sciences citoyennes de la suite GeoNature permettant la saisie participative d'observations naturalistes, avec 9 PR (4 mergees) et 34 commits sur la periode 2024-2025. Les contributions portent sur l'amelioration UX de la validation d'observations, l'autocompletion taxonomique et les composants Angular.
🎯 Contexte et objectifs
- Faire évoluer des applications naturalistes en production sur des flux critiques: import, synthèse, monitoring, taxonomie et gestion des utilisateurs.
- Stabiliser les interfaces backend/frontend via des contrats API plus robustes, du filtrage/pagination, des formulaires dynamiques et une gestion d'erreurs homogène.
- Réduire les corrections manuelles côté métier en améliorant la cohérence des modèles de données, les retours d'administration et les parcours UI.
🧩 Conception
- #projet-citizen : PR mergées : #430 a fait évoluer la récupération TaxHub pour gérer des listes volumineuses, reformater les taxons/médias et adapter le formulaire d'observation à l'autocomplétion et à la présélection ; #438 a ajouté le compteur de sites dans les statistiques de la page d'accueil et propagé les traductions associées ; #436 a complété la couche i18n, notamment en allemand, dans plusieurs écrans d'authentification, d'observation, de sites et de configuration ; #435 a corrigé la redirection vers le backoffice via la configuration Apache. PR ouvertes : #466 ajoute un proxy i18n pour le mode développement côté webpack/server ; #465 introduit un sélecteur de langue et un service de persistance frontend/server ; #393 refond l'affichage détaillé des observations et sites pour gérer des descriptions et des structures JSON imbriquées.
💻 Développement
#projet-citizen : #430 a refactoré l'adaptation des taxons retournés par TaxHub pour agréger
taxref, médias et attributs utiles au formulaire. Source: PR #430.#projet-citizen : #430 a adapté le formulaire d'observation pour distinguer les listes taxonomiques courtes et longues, charger le référentiel du programme et présélectionner automatiquement l'unique taxon disponible. Source: PR #430.
this.surveySpecies$ = this.programService .getProgramTaxonomyList(this.taxonomyListID) .pipe( tap((species) => { this.taxa = species; }), switchMap((species) => this.programService.getAllProgramTaxonomyList().pipe( map((listsTaxonomy) => { this.taxaCount = listsTaxonomy .filter((lt) => lt.id_liste === this.taxonomyListID) .map((lt) => lt.nb_taxons)[0]; if (this.taxaCount >= this.taxonAutocompleteInputThreshold) { this.inputAutoCompleteSetup(); } else if (this.taxaCount === 1) { this.onTaxonSelected(species[0]); } return species; }) ) ), share() );
🏗️ Infrastructure et déploiement
- #projet-citizen : #466 ajoute un proxy de traductions en développement ; #465 ajoute un sélecteur de langue réutilisable côté topbar et serveur.
📈 Résultats
- Nb PR: 7
- Nb commits: 34
- Nb issues: 3
- Période: 20 novembre 2024 au 17 juin 2025
Technologies utilisées
Frontend
Angular
RxJS
Backend
Flask
Python
DevOps
GitHub Actions
Bases de donnees (SGBD & SQL)
PostgreSQL