Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validation - Permalien d'une observation #1727

Closed
Gaetanbrl opened this issue Feb 18, 2022 · 23 comments
Closed

Validation - Permalien d'une observation #1727

Gaetanbrl opened this issue Feb 18, 2022 · 23 comments

Comments

@Gaetanbrl
Copy link
Contributor

Gaetanbrl commented Feb 18, 2022

Version

develop

Description fonctionnelle

Actuellement, un lien vers l'observation existe (voir mail de contact) via :
http://FQDN/#/occtax/info/id_counting/5

Dans l'UI de validation, cette évolution permet d'ajouter un bouton type permalien.
L'idée est de récupérer dans le presse-papier le permalien pour le partager dans un mail par exemple ou dans le mail de contact directement.

Ce bouton sera rajouté dans la barre d'outils proposée dans l'issue #1474 (PR en cours).

image

Description technique

Nous proposons d'avoir un permalien de ce type :

https://FQDN/#/validation/occurrence/5

Les développements visent à ouvrir la modal de validation directement à l'init du composant sur l'observation concernée (uuid) :

La modal devra donc être adaptée si besoin pour s'ouvrir selon l'UUID de l'observation passé dans le permalien.

Est-ce que cette approche convient dans un premier temps ?

@camillemonchicourt
Copy link
Member

Oui très bien mais j'utiliserai plutôt l'id_synthese car on en est plus certain dans GeoNature et car certaines observations dans la synthèse peuvent ne pas avoir d'UUID.

Il faut 2 R à occurrence.

@camillemonchicourt
Copy link
Member

On pourrait avoir le même permalien dans la synthèse en remplaçant /validation/ par /synthese/

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 21, 2022

On pourrait avoir le même permalien dans la synthèse en remplaçant /validation/ par /synthese/

Oui ce serait possible du coup dans un second temps, les composants n'étant pas les mêmes (les modales ne sont pas génériques).

@Gaetanbrl
Copy link
Contributor Author

Actuellement, l'URL du permalien que j'utilise est hard code :

    const urlPermaLink = `
      ${this.APP_CONFIG.URL_APPLICATION}
      /#/validation/occurrence/
      ${this.selectedObs.entity_source_pk_value}`;

Mais pour réaliser le lien à insérer dans le mail de contact lorsqu'on envoi un mail depuis la modal de validation, on voir qu'il faut l'URL de l'application et une valeur url_source :

d['data_link'] = [
this.APP_CONFIG.URL_APPLICATION,
this.selectedObs.source.url_source,
this.selectedObs.entity_source_pk_value
].join("/");

On utilise le champ url_source de la table gn_synthese.t_source==> #/occtax/info/id_counting.

Cette valeur url_source a été insérée via les fichiers SQL de migration notamment :

INSERT INTO gn_synthese.t_sources ( name_source, desc_source, entity_source_pk_field, url_source)
VALUES ('Occtax', 'Données issues du module Occtax', 'pr_occtax.cor_counting_occtax.id_counting_occtax', '#/occtax/info/id_counting');

Est-ce intéressant d'avoir ce même fonctionnement pour le permalien ? Si oui, a quel moment peuplé la valeur et dans quel table lors de l'installation ?

Merci.

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 21, 2022

En attendant la finalisation + PR de cette fonctionnalité avec Picardie-nature (et retour commentaire précédent), voici un aperçu du permalien.

Ce fonctionnement permet de partager une occurrence qui ne serait pas dans les 100 éléments listés de la validation. Dans les étapes :

  1. Ouvrir la validation
  2. Cliquer sur une occurrence
  3. Cliquer sur "Copier le permalien"
  4. Partager (coller dans un doc ou autre)
  5. Coller le lien pour accéder directement à la modal de validation

Dans le code, un appel à l'API /validation est effectué en ajoutant dans les paramètres POST un filtre sur l'id_synthese (comme proposé par @camillemonchicourt). L'occurrence étant dans la liste du tableau de validation, on peut alors afficher la modal avec le fonctionnement natif.

Un bouton "Voir toutes les occurrences" permet de revenir à la vue globale avec ou sans l'occurrence partagée.

Est-ce que ce fonctionnement conviendrai ?

permaOccurrence

@camillemonchicourt
Copy link
Member

OK merci pour ce retour.
Ça me semble bien et je ne vois pas de raison de stocker la base de l'URL dans la BDD ou ailleurs.
En dur dans le code me semble OK car elle est fixe.

J'ai un doute par contre sur le bouton "Voir toutes les occurrences". Déjà car il ne ramène pas vraiment à toutes les occurrences et car il s'agit alors plutôt de lancer une autre recherche ou de réinitialiser la recherche ?

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 21, 2022

il s'agit alors plutôt de lancer une autre recherche ou de réinitialiser la recherche ?

C'est simplement un lien vers la page /validation (via le router angular).

@jpm-cbna
Copy link
Contributor

Oui très bien mais j'utiliserai plutôt l'id_synthese car on en est plus certain dans GeoNature et car certaines observations dans la synthèse peuvent ne pas avoir d'UUID.

C'est dommage de ne pas pouvoir utiliser l'UUID de l'observation dans le permalien si l'observation en possède un. L'id_synthese est un identifiant auto-incrémenté qui a plus vocation a être utilisé en interne. J'entrevoie déjà plein de raisons qui pourraient mener à son changement...

@camillemonchicourt
Copy link
Member

C'est justement car l'id est un élément interne que c'est l'idéal pour faire un lien vers l'objet à l'intérieur de GeoNature et car on est certain d'en avoir un, qu'il est auto-incremente.
Je ne vois peu ou pas de raison qu'il change, et même si c'est le cas, c'est pas grave. Quand on copie un lien vers une observation c'est pour la partager dans l'instant.


OK pour le lien "Voir toutes les observations", je suis pas convaincu par la solution car pas très clair selon moi ni réellement correspondant au comportement (vu que ça ne renvoie pas vraiment à toutes les observations) mais je comprends le besoin vu qu'on est filtré sur une seule observation.
Je préférerais plutôt utiliser l'actuel bouton de réinitialisation des filtres, mais cela ne sera peut-être pas assez intuitif ?
Ou un lien de retour à l'accueil du module (fonctionnalité inexistante dans GeoNature actuellement et clairement manquante). Pour cela on pourrait simplement rendre le nom de chaque module cliquable dans le header ?

@Gaetanbrl
Copy link
Contributor Author

vu que ça ne renvoie pas vraiment à toutes les observations

J'ai pensé à ce label car ce bouton renvoi à toutes les observation par défaut lorsqu'on ouvre le module validation (équivalent de cliquer sur "validation" à gauche).

Je préférerais plutôt utiliser l'actuel bouton de réinitialisation des filtres , mais cela ne sera peut-être pas assez intuitif ?

Je suis assez d'accord. Mais vu que le filtre / l'UI de filtre n'est pas du tout utilisé, un clic sur "réinitialisé" ne fait rien du tout. Ce n'est que l'API qui est utilisé lors du chargement des données dans la liste.

Vu que l'utilisateur arrive sur la page, mais qu'il n'a encore fait aucun filtre, ca peut le déstabiliser et cliquer sur le bouton de réinit des filtres n'est plus intuitif en effet.

Code utilisé ici :

  loadAndStoreData(formatedParams) {
    if(this.idSynthese) {
      // filter data by search id
      formatedParams.id_synthese = this.idSynthese;
    }

Ou un lien de retour à l'accueil du module

Ca peut être une alternative. Je peux rajouter un bouton du type "Retour aux autre occurrences" ou "Module validation" comme si on cliquait à gauche vers la validations mais sans avoir à ouvrir le panel ?

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 22, 2022

d'ailleurs @camillemonchicourt je propose de masquer la recherche quand on arrive sur une seule occurrence via le permalien car on a de toute façon qu'une seule occurrence.
Avec un nouveau label pour le bouton ca donnerait ca :

image

@camillemonchicourt
Copy link
Member

Ou un lien de retour à l'accueil du module

Ça peut être une alternative. Je peux rajouter un bouton du type "Retour aux autre occurrences" ou "Module validation" comme si on cliquait à gauche vers la validations mais sans avoir à ouvrir le panel ?

En effet le bouton actuel de réinitialisation des filtres ne semble pas suffisant/pertinent.
Un bouton en bas de liste, je trouve que c'est dommage et pas très cohérent, et ça reste faux en l'état car cela n'affiche pas "Toutes les occurrences".

J'aimerai vraiment que l'on ne rajoute pas encore un bouton et je resterai uniquement sur l'idée de rendre le titre de chaque module dans le Header cliquable, cela permettrait ainsi de revenir à l'accueil du module directement sans ouvrir le menu latéral. Ça serait aussi bien utile dans Occtax, etc....

Je comprends l'idée de masquer la recherche quand on arrive sur une occurrence, mais je préfère au contraire la laisser affichée, pour ne pas avoir des interfaces et comportements trop différents et surtout car une fois qu'on a consultée cette occurrence, la recherche permet justement de rebondir sur autre autre.

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 22, 2022

ne pas avoir des interfaces et comportements trop différents et surtout car une fois qu'on a consultée cette occurrence, la recherche permet justement de rebondir sur autre autre.

Je viens de faire une modification pour enlever le bouton sous la liste que j'avais ajouté et utiliser le bouton "Reset filter" de la recherche pour router l'utilisateur de /validation/occurrence/5 vers /validation.

Le router Angular gère bien ce cas et ne route pas vers /validation si l'utilisateur est déjà sur /validation.

Donc au clic sur "Reset filters" après avoir ouvert un permalien (/validation/occurrence/5) , l'utilisateur peut utiliser le module validation de façon classique et faire sa recherche ou autre.

@jbdesbas
Copy link
Contributor

jbdesbas commented Feb 24, 2022

C'est justement car l'id est un élément interne que c'est l'idéal pour faire un lien vers l'objet à l'intérieur de GeoNature et car on est certain d'en avoir un, qu'il est auto-incremente. Je ne vois peu ou pas de raison qu'il change, et même si c'est le cas, c'est pas grave. Quand on copie un lien vers une observation c'est pour la partager dans l'instant.

@camillemonchicourt @jpm-cbna

Concernant le permalien, on ne pourrait pas simplement créer deux routes occurrence/<int> et occurrence/<uuid> (avec par exemple une simple redirection uuid->id_synthese) ce qui permettrait de pouvoir générer des url qui restent utilisables même en cas de changement majeurs (migrations, fusion de bases, changement de solution logiciel, etc..).

@camillemonchicourt
Copy link
Member

Je ne vois pas tant d'intérêt à ce qu'une URL d'une observation soit pérenne dans le temps.
On a besoin d'un lien à un moment donné pour aller vérifier ou valider une observation.
Mais si l'id_synthese évolue, cela sera très rare et donc pas impactant selon moi.
Et dans l'état actuel je vois plus de cas où l'UUID peut changer ou alors ne pas être présent.

Donc je resterai vraiment uniquement sur l'id_synthese qui est interne et est la clé primaire de référence à l'intérieur de l'outil.

@jbdesbas
Copy link
Contributor

Lorsque des données quittent la base source(gbif, SINP, etc.) ca me parait important que celles-ci aient une URL pérenne qui permette d’accéder au attributs les plus récents et les plus complets directement auprès du producteur.
Le lien basé sur l'UUID pourra (devrait) être maintenu actif (via une redirection par exemple) par le producteur même en cas de changement d'outil de gestion des données. (C'est surtout valable pour le permalien vers la synthèse, pas tellement pour la validation).

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 24, 2022

@jbdesbas il faut prendre également en compte le cas où l'UUID n'existe pas. Si on se base sur l'UUID uniquement, on ne pourra pas créer de permalien, ce qui serait dommage si c'est un échange entre validateurs d'une même plateforme car ils peuvent dans ce cas se baser sur l'id_synthese.

Aussi, le permalien contient l'URL de la plateforme sur laquelle se passe la validation type :
https://foo.geonature.fr/#/validation/occurrence/5

Un utilisateur externe devra donc changer manuellement le domaine de l'URL pour remplacer foo.geonature.fr par bar.geonature.fr. Un permalien a difficilement pour objectif de réaliser un lien durable entre plusieurs systèmes d'information.

J'ai aussi une question sur le côté utilisateur. Si l'objectif du permalien est de faciliter un échange entre les validateurs, alors pourquoi avoir besoin d'utiliser l'UUID pour un usage sur une autre plateforme ? Si la validation doit se faire sur une même plateforme, je ne comprend pas l'avantage de de l'UUID avec le risque qu'il n'existe pas.

Dans tous les cas, je peux proposer 2 routes permettent d'utiliser l'id_synthese si l'uuid n'existe pas.

Donc avec id_synthse=5 et UUID = 5b422e92-40ef-4f15-8677-7dcd2e7c2c36 on aurait :

https://foo.geonature.fr/#/validation/occurrence/5/5b422e92-40ef-4f15-8677-7dcd2e7c2c36

...ou sans UUID :

https://foo.geonature.fr/#/validation/occurrence/5

Qu'en pensez-vous ?

@jbdesbas
Copy link
Contributor

jbdesbas commented Feb 25, 2022

@Gaetanbrl OK pour le permalien de validation basé sur l'id_synthese, il s'agit bien d'un lien utilisé dans le cas d'un travail plus ou moins spécifique à la plateforme.
Mon propos concernait plutôt le permalien vers la synthèse (un peu HS désolé) : celui basé sur l'uuid peut facilement être maintenu en cas de changement complet d'outil ou de plateforme de production (à condition que le nom de domaine soit conservé bien sûr), via une redirection visible ou invisible.

Je ne suis pas sûr de bien comprendre ton exemple avec les sous-domaines foo et bar ? C'est pas plutôt geonature.foo.fr et geonature.bar.fr ?

Exemple (fictif ^^) : mon SI fusionne avec celui d'une autre structure, utilisant au autre outil que GeoNature (et donc la clé primaire artificielle int change). Pendant plusieurs années, j'ai diffusé des permaliens du type http://monsi.fr/synthese/<uuid> (gbif, partenaires, SINP, etc..). Il suffit que le domaine monsi.fr soit maintenu par la nouvelle structure porteuse avec une redirection (visible ou non) http://monsi.fr/synthese/<uuid> -> http://monnouveausi.fr/obs/<uuid>, et que le nouveau SI se charge de servir les infos de la donnée à partir de son uuid (ce qui est impossible avec l'ancienne clé primaire). Sur le long terme, l'uuid est beaucoup plus stable que la clé primaire interne.


Si on met quand même l'uuid pour la validation, pour ton dernier exemple, je verrai plutôt à :
https://foo.geonature.fr/#/validation/occurrence/5b422e92-40ef-4f15-8677-7dcd2e7c2c36 (sans l'id_synthese 5)
et
https://foo.geonature.fr/#/validation/occurrence/5

Avec un check coté serveur pour voir si c'est un type int ou un type uuid qui est passé dans l'url. Comma ça on a les deux (si uuid existe), et tout le monde est content \o/

@jpm-cbna
Copy link
Contributor

Personnellement, je trouve qu'il vaudrait mieux utiliser l'id_synthese ou l'UUID mais pas les deux dans l'URL.

Il me semble qu'il serait plus intéressant de générer le permalien avec l'UUID s'il existe, sinon c'est l'id_synthese qui est utilisé. Éventuellement, un paramètre de config pourrait forcer l'utilisation de l'id_synthese seulement. Une redirection pourrait ensuite rediriger l'URL avec UUID vers une URL avec id_synthese qui resterait affiché dans le navigateur.

J'entends bien que l'UUID n'est pas forcément présent et qu'aujourd'hui sa gestion n'est pas forcément idéale (UUID en doublon dans différent système ou l'observation est présente, par exemple).
Ceci-dit l'UUID est vraiment un identifiant qui à pour vocation à rester accoler à l'observation quelque soit le système dans lequel elle va se trouver. Ce n'est pas le cas de l'id_synthese. Du coup, pour une URL et ça validité dans le temps, c'est vraiment plus intéressant d'utiliser l'UUID.

En tout cas, la proposition de @jbdesbas de mettre en place à minima une redirection me semble très intéressante. C'est surement moins compliqué à mettre en place et cela offre la possibilité de pouvoir accéder à une fiche à partir d'un système externe du moment que l'on connait l'UUID qui est normalement toujours transmis avec une observation.

@camillemonchicourt
Copy link
Member

Je suis toujours pas convaincu.
Pour moi l'UUID est un outil pour tracer un objet entre différents systèmes.
Pour faire un lien vers un objet dans un système, pour moi, il faut se baser sur son identifiant unique qui est sa clé primaire, élément fiable et robuste.
Donc je resterai clairement sur l'id_synthese et c'est tout, je ferai de système mixte avec des redirections dans certains cas, je vois vraiment pas l'intérêt de tout ça.
Et si possible ne pas faire encore un paramètre pour ça pour choisir entre l'un ou l'autre.

Je ferai simple et sur : id_synthese et l'objectif de pouvoir partager un lien vers un objet à un instant T sera pleinement fonctionnel et sur.

Mais si vous préférez l'UUID, je vous laisse voir, au final ce n'est pas un sujet à enjeu majeur selon moi.
Si on part sur les UUID je l'assumerai pleinement et resterait simple : Pas d'UUID, pas de lien permanent.

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Feb 28, 2022

@jpm-cbna

Personnellement, je trouve qu'il vaudrait mieux utiliser l'id_synthese ou l'UUID mais pas les deux dans l'URL.

Il y a deux routes dédiées avec un contrôle sur id_synthese ou UUID pour la proposition.

https://github.com/picardie-nature/GeoNature/blob/9e8799ec58a83a08c9831321c1d2ec4053047758/contrib/gn_module_validation/frontend/app/gnModule.module.ts#L33-L34

Je vais séparer les deux donc pour cette 1ère proposition.

Si on part sur les UUID je l'assumerai pleinement et resterait simple : Pas d'UUID, pas de lien permanent.

@camillemonchicourt on va revoir la proposition et le le besoin initial avec @jbdesbas qui n'intégré par de lien permanent mais un lien de partage entre validateurs (hors synthèse, qui ne concernera donc pas cette issue).

@Gaetanbrl
Copy link
Contributor Author

Gaetanbrl commented Mar 2, 2022

@camillemonchicourt
Suite à un échange avec @jbdesbas, nous confirmons que le permalien proposé dans cette issue permettra de partager une URL à partir de l'ld_synthese en accord avec les contraintes et besoins techniques et fonctionnels exprimés dans cette issue.

Une issue #1748 a été ouverte afin de discuter et tracer le besoin de retrouver des occurrences en dehors de GeoNature que ce soit via l'UUID ou tout autre élément existant ou à réaliser avec l'aide de la communauté.

@camillemonchicourt
Copy link
Member

Intégré dans la 2.10.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants