osm-commerces/docs/api-stats-export.md

220 lines
No EOL
6.1 KiB
Markdown

# API - Export des objets Stats
## Endpoint
```
GET /api/v1/stats/export
```
## Description
Cet endpoint permet d'exporter les objets Stats au format JSON avec leurs propriétés de nom et de décomptes, similaire à la commande `app:export-stats`.
## Paramètres de requête
| Paramètre | Type | Défaut | Description |
|-----------|------|--------|-------------|
| `zone` | string | - | Code INSEE spécifique à exporter (optionnel) |
| `pretty` | boolean | false | Formater le JSON avec indentation |
| `include_followups` | boolean | true | Inclure les données de followup |
| `include_places` | boolean | false | Inclure les données des lieux (peut être volumineux) |
## Exemples d'utilisation
### Export de toutes les zones
```bash
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export"
```
### Export avec formatage JSON
```bash
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?pretty=true"
```
### Export d'une zone spécifique
```bash
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?zone=75056"
```
### Export d'une zone avec formatage et sans followups
```bash
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?zone=75056&pretty=true&include_followups=false"
```
### Export complet avec lieux
```bash
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?pretty=true&include_places=true"
```
## Réponse
### Succès (200 OK)
```json
[
{
"id": 1,
"zone": "75056",
"name": "Paris",
"dateCreated": "2024-01-15 10:30:00",
"dateModified": "2024-01-20 14:45:00",
"population": 2161000,
"budgetAnnuel": "8500000000",
"siren": 200054781,
"codeEpci": 200054781,
"codesPostaux": "75001;75002;75003;...",
"decomptes": {
"placesCount": 1250,
"avecHoraires": 980,
"avecAdresse": 1200,
"avecSite": 850,
"avecAccessibilite": 450,
"avecNote": 320,
"completionPercent": 75,
"placesCountReal": 1250
},
"followups": [
{
"name": "fire_hydrant_count",
"measure": 1250,
"date": "2024-01-20 14:45:00"
},
{
"name": "fire_hydrant_completion",
"measure": 85.5,
"date": "2024-01-20 14:45:00"
}
],
"places": [
{
"id": 1,
"name": "Boulangerie du Centre",
"mainTag": "shop",
"osmId": 123456,
"osmKind": "node",
"email": "contact@boulangerie.fr",
"note": "Boulangerie artisanale",
"zipCode": "75001",
"siret": "12345678901234",
"lat": 48.8566,
"lon": 2.3522,
"hasOpeningHours": true,
"hasAddress": true,
"hasWebsite": true,
"hasWheelchair": false,
"hasNote": true,
"completionPercentage": 85
}
]
}
]
```
### Erreur - Zone non trouvée (404 Not Found)
```json
{
"error": "Aucun objet Stats trouvé",
"message": "Aucune zone trouvée pour le code INSEE: 99999"
}
```
### Erreur - Erreur serveur (500 Internal Server Error)
```json
{
"error": "Erreur lors de l'export",
"message": "Description de l'erreur"
}
```
## Headers de réponse
| Header | Description |
|--------|-------------|
| `Content-Type` | `application/json` |
| `Content-Disposition` | `attachment; filename="stats_export.json"` |
| `X-Export-Count` | Nombre d'objets exportés |
| `X-Export-Generated` | Date/heure de génération (format ISO 8601) |
| `X-Export-Zone` | Code INSEE si export d'une zone spécifique |
## Structure des données
### Informations générales
- `id` : Identifiant unique de l'objet Stats
- `zone` : Code INSEE de la zone
- `name` : Nom de la ville/zone
- `dateCreated` : Date de création
- `dateModified` : Date de dernière modification
### Données démographiques et administratives
- `population` : Population de la zone
- `budgetAnnuel` : Budget annuel de la collectivité
- `siren` : Code SIREN
- `codeEpci` : Code EPCI
- `codesPostaux` : Codes postaux de la zone
### Décomptes
- `placesCount` : Nombre de lieux enregistrés
- `avecHoraires` : Nombre de lieux avec horaires d'ouverture
- `avecAdresse` : Nombre de lieux avec adresse complète
- `avecSite` : Nombre de lieux avec site web
- `avecAccessibilite` : Nombre de lieux avec accessibilité PMR
- `avecNote` : Nombre de lieux avec note
- `completionPercent` : Pourcentage de complétion global
- `placesCountReal` : Nombre réel de lieux (comptage direct)
### Followups (si `include_followups=true`)
- `followups` : Tableau des mesures de suivi (CityFollowUp)
- `name` : Nom de la mesure
- `measure` : Valeur de la mesure
- `date` : Date de la mesure
### Places (si `include_places=true`)
- `places` : Tableau des lieux de la zone
- `id` : Identifiant du lieu
- `name` : Nom du lieu
- `mainTag` : Tag principal OSM
- `osmId` : ID OSM
- `osmKind` : Type OSM (node/way)
- `email` : Email de contact
- `note` : Note
- `zipCode` : Code postal
- `siret` : Numéro SIRET
- `lat` : Latitude
- `lon` : Longitude
- `hasOpeningHours` : A des horaires d'ouverture
- `hasAddress` : A une adresse complète
- `hasWebsite` : A un site web
- `hasWheelchair` : A des informations d'accessibilité
- `hasNote` : A une note
- `completionPercentage` : Pourcentage de complétion du lieu
## Cas d'usage
### Export pour analyse
```bash
# Export de toutes les villes avec formatage
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?pretty=true" > analyse_villes.json
# Export d'une ville spécifique
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?zone=75056&pretty=true" > paris.json
```
### Export pour traitement automatisé
```bash
# Export compact pour traitement par script
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export" > stats_compact.json
```
### Export avec données complètes
```bash
# Export avec tous les lieux (attention: peut être volumineux)
curl "https://osm-commerces.cipherbliss.com/api/v1/stats/export?include_places=true&pretty=true" > stats_complet.json
```
## Limitations
- L'option `include_places=true` peut générer des fichiers très volumineux pour les grandes villes
- Les requêtes avec `include_places=true` peuvent être plus lentes
- Le formatage JSON (`pretty=true`) augmente la taille de la réponse