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)}" | |
| ) | |