Spaces:
Sleeping
Sleeping
AUTO-FRANCE-PARTS
refactor: Update nearby parcel retrieval to return structured response and improve error handling
e6ce7f9
from fastapi import FastAPI, HTTPException, Query | |
from typing import Dict, Any, List | |
from api_sources.lexicon import LexiconAPI | |
from domain.repositories.parcel_repository import ParcelRepository | |
from domain.use_cases.get_nearby_parcels_by_sampling import GetNearbyParcelsBySamplingUseCase | |
app = FastAPI( | |
title="Data API", | |
description="API pour récupérer des données de parcelles depuis différentes sources", | |
version="1.0.0" | |
) | |
# Instance de l'API Lexicon | |
lexicon_api = LexiconAPI() | |
# Repository et use cases | |
parcel_repository = ParcelRepository(lexicon_api) | |
def greet_json(): | |
return {"Hello": "World!"} | |
async def get_parcel_identifier( | |
latitude: float = Query(..., description="Latitude en degrés décimaux"), | |
longitude: float = Query(..., description="Longitude en degrés décimaux") | |
) -> Dict[str, Any]: | |
""" | |
Récupère les informations d'identification de parcelle à partir des coordonnées GPS. | |
Args: | |
latitude: Latitude en degrés décimaux | |
longitude: Longitude en degrés décimaux | |
Returns: | |
Dict contenant les données de la parcelle | |
""" | |
try: | |
# Appel de l'API Lexicon pour récupérer les données | |
parcel_data = await lexicon_api.get_parcel_from_lat_lon(latitude, longitude) | |
return parcel_data | |
except Exception as e: | |
raise HTTPException( | |
status_code=500, | |
detail=f"Erreur lors de la récupération des données de parcelle: {str(e)}" | |
) | |
async def get_nearby_parcels( | |
latitude: float = Query(..., description="Latitude du point central en degrés décimaux"), | |
longitude: float = Query(..., description="Longitude du point central en degrés décimaux"), | |
radius_m: float = Query(200, description="Rayon de recherche en mètres", gt=0), | |
step_m: float = Query(100, description="Pas d'échantillonnage en mètres (densité des points)", gt=0) | |
) -> Dict : | |
""" | |
Récupère les parcelles à proximité d'un point donné par échantillonnage. | |
Args: | |
latitude: Latitude du point central en degrés décimaux | |
longitude: Longitude du point central en degrés décimaux | |
radius_m: Rayon de recherche en mètres | |
step_m: Pas d'échantillonnage en mètres (plus petit = plus dense) | |
Returns: | |
Liste des parcelles trouvées dans la zone | |
""" | |
try: | |
# Création du use case avec les paramètres | |
get_nearby_parcels_use_case = GetNearbyParcelsBySamplingUseCase( | |
parcel_repository=parcel_repository, | |
buffer_radius_m=radius_m, | |
step_m=step_m | |
) | |
# Exécution du use case | |
nearby_parcels = await get_nearby_parcels_use_case(latitude, longitude) | |
return { | |
"parcels": nearby_parcels["parcels"], | |
"number_of_points": nearby_parcels["number_of_points"] | |
} | |
except Exception as e: | |
raise HTTPException( | |
status_code=500, | |
detail=f"Erreur lors de la récupération des parcelles à proximité: {str(e)}" | |
) | |