GeoNature-citizen

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
🌐 Voir le projet

Technologies utilisées

Frontend
Angular
RxJS
Backend
Flask
Python
DevOps
GitHub Actions
Bases de donnees (SGBD & SQL)
PostgreSQL