1.8 KiB
1.8 KiB
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
PexelsImageSourcedans l'infrastructure - Modifier
main.pypour 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"]outhemeou"logimage"en fallback
Modification : routing dans main.py
Remplacer la logique actuelle (Unsplash uniquement) par :
- Lire
PEXELS_API_KEYetUNSPLASH_ACCESS_KEYdepuis l'environnement - Si
PEXELS_API_KEYest présente → instancierPexelsImageSource - Sinon si
UNSPLASH_ACCESS_KEYest présente → instancierUnsplashImageSource - 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
ImageSourcereste inchangé - Le use case
GeneratePuzzlesUseCasereste inchangé UnsplashImageSourcereste inchangé (prêt pour quand la clé sera disponible)