46 lines
1.8 KiB
Markdown
46 lines
1.8 KiB
Markdown
# Design : intégration Pexels et aiguillage multi-provider
|
|
|
|
**Date :** 2026-05-20
|
|
|
|
## Contexte
|
|
|
|
Le projet dispose déjà d'un port `ImageSource` (ABC) et d'une implémentation `UnsplashImageSource`. La clé API Unsplash n'est pas encore disponible ; une clé Pexels est disponible maintenant. L'objectif est d'ajouter le support Pexels et de router automatiquement vers le bon provider selon les variables d'environnement.
|
|
|
|
## Périmètre
|
|
|
|
- Ajouter `PexelsImageSource` dans l'infrastructure
|
|
- Modifier `main.py` pour router selon les clés d'API présentes
|
|
- Pas de changement au domain, au port, ni au use case
|
|
|
|
## Nouveau fichier : `PexelsImageSource`
|
|
|
|
**Chemin :** `src/logimage/infrastructure/image/pexels_source.py`
|
|
|
|
Implémente `ImageSource`. Deux endpoints selon la présence d'un thème :
|
|
- Avec thème : `GET https://api.pexels.com/v1/search?query=<theme>&per_page=1`
|
|
- Sans thème : `GET https://api.pexels.com/v1/curated?per_page=1`
|
|
|
|
Authentification : header `Authorization: <api_key>` (pas de préfixe).
|
|
|
|
Extraction des données :
|
|
- URL image : `photo["src"]["large"]`
|
|
- Titre : `photo["alt"]` ou `theme` ou `"logimage"` en fallback
|
|
|
|
## Modification : routing dans `main.py`
|
|
|
|
Remplacer la logique actuelle (Unsplash uniquement) par :
|
|
|
|
1. Lire `PEXELS_API_KEY` et `UNSPLASH_ACCESS_KEY` depuis l'environnement
|
|
2. Si `PEXELS_API_KEY` est présente → instancier `PexelsImageSource`
|
|
3. Sinon si `UNSPLASH_ACCESS_KEY` est présente → instancier `UnsplashImageSource`
|
|
4. Sinon → afficher une erreur claire et quitter :
|
|
`"Error: set PEXELS_API_KEY or UNSPLASH_ACCESS_KEY in .env"`
|
|
|
|
Pexels est prioritaire car c'est la clé disponible aujourd'hui.
|
|
|
|
## Ce qui ne change pas
|
|
|
|
- Le port `ImageSource` reste inchangé
|
|
- Le use case `GeneratePuzzlesUseCase` reste inchangé
|
|
- `UnsplashImageSource` reste inchangé (prêt pour quand la clé sera disponible)
|