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

API Back Front interface #185

Merged
merged 34 commits into from
Jun 20, 2024
Merged

API Back Front interface #185

merged 34 commits into from
Jun 20, 2024

Conversation

rv2931
Copy link
Collaborator

@rv2931 rv2931 commented Jun 3, 2024

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
Copy link
Collaborator Author

rv2931 commented Jun 4, 2024

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)

  • GET /vessels
  • GET /vessels/{vessel_id}
  • GET /vessels/all/positions/last
  • GET /vessels/{vessel_id}/positions/last
  • GET /vessels/{vessel_id}/excursions
  • GET /vessels/{vessel_id}/excursions/{excursions_id}
  • GET /vessels/{vessel_id}/excursions/{excursions_id}/segments
  • GET /vessels/{vessel_id}/excursions/{excursions_id}/segments/{segment_id}
  • GET /ports
  • GET /ports/{port_id}
  • GET /zones
  • GET /zones/{zones_id}

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
Copy link
Collaborator

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
Copy link
Collaborator Author

rv2931 commented Jun 7, 2024

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
Copy link
Collaborator Author

rv2931 commented Jun 7, 2024

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
Copy link
Collaborator Author

rv2931 commented Jun 7, 2024

@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

backend/bloom/config.py Outdated Show resolved Hide resolved
.env.template Outdated Show resolved Hide resolved
@rv2931 rv2931 removed the request for review from tanega June 20, 2024 12:38
@rv2931 rv2931 merged commit bb21644 into main Jun 20, 2024
4 of 7 checks passed
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

Successfully merging this pull request may close these issues.

3 participants