# Fonctionnement des exports

## Requête HTTP

Pour déclencher un export, on effectue une requete POST visant une ApiResource de type ExportRequest
Toutes les ApiResource implémentant l'interface ExportRequestInterface sont traitées par le DataPersister 
`App\DataPersister\Export\LicenceCmf\ExportRequestDataPersister`.

## ExportRequestDataPersister

Le ExportRequestDataPersister utilise un pattern iterable, c'est-à-dire qu'il balaie (via la classe `ExporterHandler`)
tous les services implémentant `ExporterInterface` jusqu'à trouver un service qui supporte 
l'ExportRequest passée en paramètre.

Une fois le bon service d'export trouvé, il appelle la méthode `export($exportRequest)` de ce service.

## Le service d'export

Les services d'export recoivent en paramètre une ExportRequest.

Ils vont ensuite effectuer les opérations suivantes:

1. Construire un modèle : le service génère un objet `ExportModel` (qui peut être selon les cas objet ou une collection d'objets), qui
contiendra toutes les données nécessaires au rendu du template.
2. Générer le HTML : le service passe ensuite le modèle au template Twig associé, et récupère le résultat au format HTML. 
3. Encoder : l'encodeur adapté est trouvé via la classe `EncoderHandler` qui itère sur les encoders disponibles
jusqu'à trouver le premier qui supporte le format demandé dans l'ExportRequest, puis appelle la méthode `encode($html)`
de cet encoder, et enfin récupère le contenu final du fichier
4. Création du fichier : le service `LocalStorage` est utilisé pour créer le fichier d'export dans 
un répertoire temporaire. 
5. Mise à jour de la DB : Un objet `File` est enfin enregistré en base.

