mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
export command et enddpoint pour les villes
This commit is contained in:
parent
c81affd3e3
commit
46d3b21cf6
4 changed files with 663 additions and 0 deletions
220
docs/api-stats-export.md
Normal file
220
docs/api-stats-export.md
Normal file
|
@ -0,0 +1,220 @@
|
|||
# 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
|
142
docs/export-stats-command.md
Normal file
142
docs/export-stats-command.md
Normal file
|
@ -0,0 +1,142 @@
|
|||
# Commande d'export des objets Stats
|
||||
|
||||
## Description
|
||||
|
||||
La commande `app:export-stats` permet d'exporter les objets Stats au format JSON avec leurs propriétés de nom et de décomptes.
|
||||
|
||||
## Utilisation
|
||||
|
||||
### Export de tous les objets Stats
|
||||
```bash
|
||||
php bin/console app:export-stats
|
||||
```
|
||||
|
||||
### Export avec formatage JSON
|
||||
```bash
|
||||
php bin/console app:export-stats --pretty
|
||||
```
|
||||
|
||||
### Export vers un fichier spécifique
|
||||
```bash
|
||||
php bin/console app:export-stats --output=mon_export.json
|
||||
```
|
||||
|
||||
### Export d'une zone spécifique
|
||||
```bash
|
||||
php bin/console app:export-stats --zone=75056
|
||||
```
|
||||
|
||||
### Export avec toutes les options
|
||||
```bash
|
||||
php bin/console app:export-stats --output=paris_stats.json --zone=75056 --pretty
|
||||
```
|
||||
|
||||
### Export avec mode verbeux
|
||||
```bash
|
||||
php bin/console app:export-stats -v
|
||||
```
|
||||
|
||||
## Options disponibles
|
||||
|
||||
- `--output, -o` : Fichier de sortie (défaut: `stats_export.json`)
|
||||
- `--zone, -z` : Code INSEE spécifique à exporter (optionnel)
|
||||
- `--pretty, -p` : Formater le JSON avec indentation
|
||||
- `-v, --verbose` : Mode verbeux pour afficher un aperçu des données
|
||||
|
||||
## Structure des données exportées
|
||||
|
||||
Le fichier JSON contient un tableau d'objets avec la structure suivante :
|
||||
|
||||
```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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## Propriétés exporté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
|
||||
- `followups` : Tableau des mesures de suivi (CityFollowUp)
|
||||
- `name` : Nom de la mesure
|
||||
- `measure` : Valeur de la mesure
|
||||
- `date` : Date de la mesure
|
||||
|
||||
## Exemples d'utilisation
|
||||
|
||||
### Export pour analyse
|
||||
```bash
|
||||
# Export de toutes les villes avec formatage
|
||||
php bin/console app:export-stats --pretty --output=analyse_villes.json
|
||||
|
||||
# Export d'une ville spécifique
|
||||
php bin/console app:export-stats --zone=75056 --pretty --output=paris.json
|
||||
```
|
||||
|
||||
### Export pour traitement automatisé
|
||||
```bash
|
||||
# Export compact pour traitement par script
|
||||
php bin/console app:export-stats --output=stats_compact.json
|
||||
```
|
||||
|
||||
### Vérification des données
|
||||
```bash
|
||||
# Export avec aperçu des données
|
||||
php bin/console app:export-stats --pretty -v
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue