# 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 