-
Notifications
You must be signed in to change notification settings - Fork 102
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
Geofit/mes lieux #984
Geofit/mes lieux #984
Conversation
La BDD et le code source de GeoNature doivent être en anglais. |
Il manque la mise à jour de la BDD pour ceux qui ont déjà GeoNature. |
Fonctionnalité mes-lieux angliciser. Le fichier update2.4.1to2.4.2.sql a été ajouté. |
Comme indiqué dans les spécifications la fonctionnalité "Mes lieux" n'est pas spécifique à Occtax mais globale pour être utilisée depuis n'importe quel module. C'est pourquoi elle est stockée dans "gn_commons'. |
Les spécifications indiquaient aussi que cette fonctionnalité devait pouvoir être affichée ou non, avec un paramètre. |
data/core/commons.sql
Outdated
|
||
--MET 22/07/2020 Table t_places pour la fonctionnalité mes-lieux | ||
CREATE TABLE gn_commons.t_places |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Voir les conventions des fichiers SQL existants:
les contraintes (PK et FK) sont écrites dans une section à part.
data/core/commons.sql
Outdated
--MET 22/07/2020 Table t_places pour la fonctionnalité mes-lieux | ||
CREATE TABLE gn_commons.t_places | ||
( | ||
id_role integer NOT NULL, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je rajouterais un champs id_place
pour la PK en serial.
//-------------------------------------------------------------------------------------- | ||
//----------------Geofit additional code map.service.ts | ||
//liste des lieux | ||
getPlaces(): Observable<any> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Les appels à l'API doivent être dans ce fichier :
https://github.com/PnX-SI/GeoNature/blob/master/frontend/src/app/GN2CommonModule/form/data-form.service.ts
} | ||
|
||
// Supprimer lieu | ||
deletePlace(nom:String): Observable<{}> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Les appels à l'API doivent être dans ce fichier :
https://github.com/PnX-SI/GeoNature/blob/master/frontend/src/app/GN2CommonModule/form/data-form.service.ts
} | ||
|
||
//Ajouter lieu | ||
addPlace(place:GeoJSON.Feature): Observable<any>{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même remarque
contrib/occtax/backend/blueprint.py
Outdated
@@ -591,3 +592,58 @@ def export(info_role): | |||
error=message, | |||
redirect=current_app.config["URL_APPLICATION"] + "/#/occtax", | |||
) | |||
####################################################################################### |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ces routes ne devraient pas être dans le module "occtax" mais dans le fichier de routes du schéma gn_commons
: https://github.com/PnX-SI/GeoNature/blob/master/backend/geonature/core/gn_commons/routes.py
contrib/occtax/backend/blueprint.py
Outdated
|
||
####################################################################################### | ||
# supprimer un lieu | ||
@blueprint.route("/delPlace/<string:nom>", methods=["DELETE"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Les noms de "lieux" ne sont pas unique. Cette route devrait prendre en paramètre un id_place
(voir remarque sur le SQL) plutôt que le nom .
De plus, ici une personne peut supprimer des lieux qui ne lui appartienne pas. Il faut vérifier que info_role.id_role == t_places.id_role
Sur les conventions de style du code, il faut respecter la PEP8 (notamment le snake_case: cf delOnePlace
)
contrib/occtax/backend/models.py
Outdated
####################################################################################### | ||
@serializable | ||
@geoserializable | ||
class TPlaces(DB.Model): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Devrait être dans ce fichier: https://github.com/PnX-SI/GeoNature/blob/master/backend/geonature/core/gn_commons/models.py
…éplacement dans gn_commons
Nous avons pris en compte vos remarques dans la dernière livraison. Ajout d'un ID unique, déplacement de la fonctionnalité dans gn_commons, conventions sql et PEP8 et ergonomie de la fonctionnalité. |
Merci pour les corrections. Je vais pouvoir merger. |
Désolé, encore quelques petits points à corriger:
|
On peut ajouter 2 lieux qui ont le même nom, mais pas pour un même utilisateur. |
La livraison doit corriger tout cela. Je ne suis pas sur de la bonne gestion des erreurs coté Flask, surtout pour retourner une liste de lieu vide, et son traitement coté Angular. En tout cas, cela semble fonctionner |
this.listPlacesSub = this._dfs. | ||
getPlaces() | ||
.subscribe(res => { | ||
if(Object.keys(res[0]).length > 0){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je ne suis pas sûr de comprendre cette ligne ? Quel est le cas d'usage ?
if(Object.keys(res[0]).length > 0){
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si l'objet retourné de getPlaces n'est pas vide. Si la liste des lieux est vide, ca renvoie un tableau à un élément (objet) vide => [{}]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok.
Du coup la pratique qu'on a sur ce genre de cas, c'est de renvoyer un tableau vide côté python si il n'y a aucune données. Le fait de renvoyer un tableau vide ou None, fait que le décorateur @json_resp
renvoie une 404 (qui est le code approprié dans ce cas). Donc ce que tu avais écrit avant le commit était ok:
@json_resp
def get_places(info_role):
id_role = info_role.id_role
data = DB.session.query(TPlaces).filter(TPlaces.id_role == id_role).all()
return [n.as_geofeature("place_geom", "id_place") for n in data]
Côté frontend, le subscribe sur la route, fait passer la 404 dans les erreurs :
fetchPlaces() {
this._dfs.getPlaces().subscribe((res) => {
this.places = res;
this.place = this.places[0];
},
(err) => {
if (err.status === 404) {
this.places = [];
this.place = null;
}
}
);
}
J'ai corrigé de mon côté.
fonctionnalité mes lieux