dataforgoodfr / 12_bloom

23 stars 11 forks source link

API Back Front interface #185

Closed rv2931 closed 2 months ago

rv2931 commented 3 months ago

Le but de cette PR est d'ajouter le service d'api entre le back et le front Sur la base d'un brainstorming fait avec @SaboniAmine fin mai dont voici le résumé:

Bonsoir, pour la partie endpoints on a pu identifier les 4 premiers, dont on va prioriser par facilité à développer:

    La "carte d'identité" des navires, qui est retournée par recherche par searchbar
    La sélection des trajectoires, à partir d'une tranche horaire
    L'affichage par défaut des zones (aires protégées, eaux territoriales, bande côtière)
    L'affichage par défaut des navires présents dans la zone par défaut

voici un petit schéma, qui sera à raffiner :

image

Dans un deuxième temps un point a été fait entre @rv2931 et @tanega dont voici le résumé:

On a discuté avec
[@Tanega](https://data-for-good.slack.com/team/U065EKU1UES)
en début de semaine en se rebasant sur le CR du brainstorming API de jeudi dernier
J'ai pas vraiment fait de CR mais pour ce qui me reste

    Concernant les zones, ça parait intéressant de générer nos propres fichiers au format Tuiles (https://guides.etalab.gouv.fr/apis-geo/3-tuiles-vecteur.html) à partir de la base de données pour garder la cohérences entre affichage, analyse data. L'idéal serait de générer un fichier par type de zone (AMP, territorial, costal...)
    Ces fichiers zones seraient générés au besoin (mise à jour des zones) et seraient chargé en cache côté front à partir de fichier statics
    On s'est demandé pourquoi les white_zone n'étaient d'ailleurs pas dans la dim_zone ?
    Concernant les endpoints, sur la base que côté frontend on peut sélectionner la date courante et une période

    vessels/positions/last

    datetime (optionnel): date de référence prise pour les dernières positions. Défault date courante (now)
    start (optionnel) & end (optionnel): tranche de date à récupérer plus précisément si nécessaire
    si utile de récupérer les positions seules autre que les dernières positions, prévoir des endpoints lastWeek, lastMonth, lastYear, ça permet d'optimiser facilement le cache
    Côté front ne pas hésiter à charger les data sur une période plus large que celle sélectionner par l'utilisateur (si l'utilisateur requête 1 semaine, charger les positions sur 1 mois, ça permettra d'avoir une expérience fluide sur les 4 dernières semaines sans charger 2 ans de données non plus

    pour les excursions, nous avons pensé que c'était judicieux de pouvoir préciser le niveau de détail souhaité

    vessels/excursions

    with_segments (boolean): précise si on veut récupérer les excursions avec les segments
    with_zones (boolean): précise si on veut récupérer les excursions les segments avec les zones sachant qu'on aura un endpoint dédié au zone pour les récupérer de manière détaillée et progressive

    un endpoint zones basique par id ou category en plus des fichiers pour avoir les infos complémentaire de la simple geometrie au besoin

Voilà succinctement ce qu'on a pu se dire, rien de définitif ou quoi que ce soit mais ce qui nous est passé par la tête

Le modèle de données est sur le miro : https://miro.com/app/board/uXjVNuXpPj8=/

rv2931 commented 3 months ago

J'ai implémenté ces endpoints qui couvrent une bonne partie des besoins je pense Pour le moment je n'ai pas implémenté les gemaptiles, les endpoints sont prévus et s'affichent sur la doc swagger (http://localhost:8000/docs)

J'ai ajouté deux scripts docker/up_with_data.bat|sh pour windows et linux pour lancer la stack avec le chargement des données

J'ai ajouté un commentaire avec un lien vers le fichier data que j'ai utilisé et qui intègre back+front https://www.notion.so/dataforgood/Subset-database-5bc33a011fde44f0be1dce7268acbb1d

marthevienne commented 3 months ago

Pour ce qui est des zones, j'aimerais aussi avoir le détail par catégorie d'AMP comme discuté en tout début de saison (ex : je veux uniquement afficher les AMP Natura 2000 habitat). Valeurs dans la colonne desig_eng.

rv2931 commented 3 months ago

Pour ce qui est des zones, j'aimerais aussi avoir le détail par catégorie d'AMP comme discuté en tout début de saison (ex : je veux uniquement afficher les AMP Natura 2000 habitat). Valeurs dans la colonne desig_eng.

Du coup j'ai rajouté un endpoint /zones/by-category/{category} ou category est une chaine ça me fait penser qu'il faudrait ajouter /zones/all/categories du coup aussi. je va faire ça

rv2931 commented 3 months ago

Désolé, j'avais des bugs dans les endpoints excursion, j'attendais de pouvoir générer des excrusions et segments à partir des tâches de @njouanin . Maintenant ça devrait être fonctionnel

rv2931 commented 3 months ago

@marthevienne Je viens de rajouter un endpoint /zones/by-category/{category|all}/by-sub-category/{sub} Pour afficher toutes les zones du sub category données il faut utiliser la raccourcis 'all' pour la partie catégorie /zones/by-category/all/by-sub-category/europe par exemple: affiche toutes les zones de toutes les catégories, mais de sous catégorie europe /zones/by-category/amp/by-sub-category/europe, toutes les zones amp de sous catégorie europe