Giter Club home page Giter Club logo

Comments (8)

andriacap avatar andriacap commented on September 24, 2024 1

Salut @TheoLechemia ,

Merci pour ton retour . J'ai bien vérifié les droits (voir image ci dessous)

Capture-20231204123007-1896x905

J'avais du mal a reproduire le problème de l'ARB égalemernt mais en réalité le problème survient si la requête sur les droits liés à la première requête (POST /meta/datasets?orderby=dataset_name se fini après celle lancée pour lire les droits de création dans occtax.)

En mode debug , si tu tentes à différentes reprise tu auras un moment où la liste des jdd sera l'ensemble des jdd (et tu verras que la requête POST /meta/datasets?orderby=dataset_name s'est éxécuté deux fois avec celle qui appelle l'ensemble des jdd qui surcouche l'autre requête qui renvoie normalement les jdd que de son organisme ). Tu peux mettre un breakpoint dans le code ici et te rendre coté front sur la page de formulaire de relevé Occtax :

this._dfs.getDatasets((params = filter_param)).subscribe((res) => {
this.datasetStore.filteredDataSets = res;
this.datasetStore.datasets = res;
this.valueLoaded.emit({ value: this.datasetStore.datasets });
if (
res.length == 1 &&
this.parentFormControl.hasValidator(Validators.required) &&
[null, []].includes(this.parentFormControl.value)
) {
let value: number[] | number = res[0].id_dataset;
if (this.multiSelect) {
value = [res[0].id_dataset];
}
this.parentFormControl.patchValue(value);
}
});
}

Tente aussi en changeant les droits et en remettant les droits qui génère le bug.

Ci dessous les images avec la liste des jdd renvoyées (dans le premier cas avec seulement les jdd de l'organisme, et dans l'autre cas l'ensemble des jdd). Et pourtant les permissions sont les mêmes

Capture-20231201171450-1039x909
Capture-20231201171358-1057x905

Merci à toi pour ton retour

from geonature.

TheoLechemia avatar TheoLechemia commented on September 24, 2024 1

Ok je viens de comprendre.
Le problème vient de ce store : https://github.com/PnX-SI/GeoNature/blob/master/frontend/src/app/GN2CommonModule/form/datasets/dataset.service.ts qui est utilisé dans le composant ici : https://github.com/PnX-SI/GeoNature/blob/master/frontend/src/app/GN2CommonModule/form/datasets/datasets.component.html#L4

Le premier appel à /meta/datasets?orderby=dataset_name vient de la page carte/liste d'occtax qui charge pour les filtres la liste des JDD accessible en lecture à l'utilisateur.
Ensuite tu va sur la page du formulaire, le second appel est fait, et il finit avant le second. Donc le store contient les données du premier..
On avait dû faire ce store pour cacher des données, mais il est inopérant car on veut des listes différentes suivant les cas donc il faut le virer.
Le ngDestroy fonctionne car quand tu quitte la page carte liste, il annule ce qu'il y a après le subscribe donc il ne remplit pas le store. En virant le store on aura plus besoin du ngDestroy (car de toute façon ça ne soulagerait pas le serveur car la requête est déjà lancée)
Il faudrait aussi voir pourquoi la route met 12sec à répondre, il y a des truc à améliorer de ce côté là

from geonature.

TheoLechemia avatar TheoLechemia commented on September 24, 2024

Salut,

Je ne pense pas que le problème viennent de là car les subscription venant de httpClient sont automatiquement unsubscribe à la reception des données ou lors du timeout :
https://angular.io/guide/http-request-data-from-server#starting-the-request
ça peut venir de :

  • ton utilisateur a des droits sur ces JDD via les acteurs mis sur le cadre d'acquisition
  • ton utilisateurs a des droits supérieurs via son groupe
    Dans mon cas j'ai mis des droit "1" en création à mon utilisateurs et aux groupes auxquels il appartient et on a le comportement attendu. Tu dois avoir un truc comme ça dans l'admin des permissions :
    image
    -> c'est bien la dernière colonne (permissions effective qui fait foi)

from geonature.

TheoLechemia avatar TheoLechemia commented on September 24, 2024

j'arrive pas à reproduire, même en mettant un time.sleep sur la route des JDD dans le cas ou elle est appelé par le module métadonnée.
A mon avis ça vient de l'input creatableInModule du composant datasets qui ne doit pas être mis au moment l'appel.
Est ce que tu arriverais à voir le contenut du POST (payload) pour les deux requêtes qui tu vois passer (et dans le cas ou tu as le bug)

from geonature.

andriacap avatar andriacap commented on September 24, 2024

Le corps des requêtes POST /meta/datasets?orderby=dataset_name qui se lancent (avec leur temp d'éxécution) :

  1. corps de la 1ère requête lancée :
    • {"module_code":"OCCTAX"}
    • Durée : 7 sec
  2. corps et temps de la 2nde requête lancée une fois sur le tab "Releve" :
    • {"active":true,"module_code":"OCCTAX","create":"OCCTAX"}
    • Durée : 611ms

Et d'ailleurs je remarque que systématiquement le bug survient lorsque la première requête est beaucoup trop longue par rapport à la deuxième requête. La première requête peut aller jusqu'à 12sec de chargement (l'autre est plus rapide, de l'ordre de 500ms à 2sec) .
Mais c'est vrai que ton time sleep devrait permettre de reproduire le bug , j'avais zappé ça dans ton message

from geonature.

andriacap avatar andriacap commented on September 24, 2024

Pour revenir sur le ngOnDestroy , lorsqu'il est mis en place il est permet bien de stoper la première requête POST /meta/datasets?orderby=dataset_name dès lors qu'on va sur le tab Releve qui lance la deuxième requête POST /meta/datasets?orderby=dataset_name avec le corps requête :
{"active":true,"module_code":"OCCTAX","create":"OCCTAX"}

D'où le fait que le bug n'apparait plus lorsque je met en place la subscription avec le unsubscribe dans le ngOnDestroy .

from geonature.

andriacap avatar andriacap commented on September 24, 2024

Super merci pour ta réponse. J'ai mis à jour la PR liée ( #2816 )

Pour le temps de requête ça fait effectivement partie des requêtes à améliorer en terme de performance .. On en a listé d'autre notamment dans la synthese .

from geonature.

camillemonchicourt avatar camillemonchicourt commented on September 24, 2024

Corrigé dans la 2.13.4.

from geonature.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.