# Conception Ce projet microservices est composé de 3 microservices. Chaque microservice part de la même base, mais traite des ressources différentes (athlètes, médailles, disciplines). ## Modèle de base Le fichier ``app.py`` contient la base Python, une simple application Flask. Dans le Dockerfile, on lance l'application avec ``gunicorn`` pour plus de performance. Chaque microservice dispose aussi d'un fichier ``models.py`` qui contient les classes de données, elles même héritant de la classe ``BaseModel`` de Pydantic afin de faire de la validation de données. Cela permet aussi de sérialiser les données en JSON facilement. Un dossier ``tests/`` est aussi présent pour les tests unitaires. Les tests sont lancés avec ``pytest``. Cela permet de tester les routes, les modèles et les fonctions de validation si il y'en a. Pour les tests, des fichiers d'example (Dossier ``./sample``) sont automatiquement copiées dans le dossier test pour avoir des données stables. Ce dossier ``sample`` sert aussi aux données de base de l'API copiées lors du Dockerbuild dans un dossier ``./data``. ## Service "home" A l'aide du design system de l'état français : [https://www.systeme-de-design.gouv.fr/](https://www.systeme-de-design.gouv.fr/), une page d'accueil est affichée à la racine du site. Celle-ci correspond à la page d'accueil du projet, et redirige vers les différentes sous API, à savoir ``/athletes``, ``/medailles`` et ``/disciplines`` mais aussi aux documentations respectives du projet. ## Docker Un unique fichier ``docker-compose.yml`` est utilisé pour lancer les 3 microservices ainsi que traefik pour le reverse proxy et le service ``home``. A l'aide de l'argument ``build`` et ``context``, les microservices sont construits à partir de leur Dockerfile respectif directement lors du ``compose``. Traefik est configuré pour rediriger les requêtes vers les microservices en fonction du sous dossier demandé à l'aide du label ``traefik.http.routers..rule``, argument ``PrefixPath``. En effet, traefik ne nécessite pas de fichier de configuration: il lit les labels des conteneurs Docker pour savoir comment rediriger les requêtes. Le fichier ``docker-compose.yml`` est configuré pour que traefik utilise le port ``8082``. ## Swagger Chaque microservice expose une GUI Swagger à l'adresse ``//swagger/``. Celle-ci est servie de façon statique à l'aide du fichier ``static/swagger.json``.