# API JO 2024

## Sommaire 
- [Architecture](#architecture)
- [Production](#production)
- [Mettre en place l'environnement de développement](#mettre-en-place-lenvironnement-de-développement)
- [Tests unitaires](#tests-unitaires)
- [Déploiement](#déploiement)

## Architecture
3 microServices sont disponibles pour le projet JO 2024:
- ``/`` : Page de présentation
- ``/athlete``: API Athlètes 
- ``/medaille``: API Médailles
- ``/discipline``: API Disciplines
- ``/swagger``: GUI Swagger (servant les assets statiques de swagger). Sinon, chaque sous service a sa propre GUI Swagger à l'adresse ``/<service>/swagger``.


[![schema](schema.png)](schema.png)
_(Ce schema manque le service "home" d'accueil affichant une page de résumé)_

À la racine du site, une page Web est affichée pour présenter le projet et rediriger l'utilisateurs vers les différentes sous API. 

Chaque microservice est indépendant et peut être déployé séparément. Ils sont définis en Python avec Flask et stockent leur données dans des fichiers JSON.
Servi de façon statique est disponible une GUI Swagger (servant le fichier ``static/swagger.json``) pour chaque microservice. Celle-ci est accessible à l'adresse ``/swagger``.


## Production 

Pour lancer les serveurs de production, il suffit de lancer les commandes suivantes:

```bash
docker compose up -d
```

Cette commande va lancer les 3 microservices dans des conteneurs Docker. 
De plus, un conteneur Traefik est lancé pour servir de reverse proxy et de load balancer. Il est configuré pour rediriger les requêtes vers les microservices en fonction du sous dossier demandé.

Pour accéder à la GUI Swagger, il faut ajouter ``/athletes/swagger`` à l'URL ou ``/medailles/swagger`` ou ``/disciplines/swagger``.

Le compose est configuré pour que traefik utilise le port ``8082``. 

Chaque service expose en interne le port ``5000``. 

## Mettre en place l'environnement de développement

Make est utilisé pour automatiser les tâches de développement. Pour installer les dépendances, lancer les tests et lancer les serveurs de développement, il suffit de lancer les commandes suivantes:

```bash
make setup
```

Avant de rendre le projet, la commande ``doAll`` est utilisée pour vérifier le fonctionnement en bout en bout du projet. 
```bash
make doAll
```

## Tests unitaires

Pour lancer les tests unitaires, il suffit de lancer la commande suivante:

```bash
make test
```

La librairie ``pytest`` est utilisée pour lancer les tests unitaires. Le client Flask est utilisé pour simuler les requêtes HTTP, et les réponses sont testées pour vérifier qu'elles sont correctes (code d'erreur, contenu). De plus, à l'aide de Pydantic, les données sont validées pour vérifier qu'elles sont correctes.

Normalement, les tests devraient tous être passants, sans erreurs ou avertissements.
