Application FastAPI servant de support au coding dojo sur la génération de code assistée par IA.
- Python 3.12+
- pip
# Cloner le dépôt
git clone <url-du-repo>
cd coding-dojo-ia-python
# Créer et activer un environnement virtuel
python -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
# Installer les dépendances (incluant celles de dev)
pip install -r requirements-dev.txt
# Démarrer l'application
uvicorn app.main:app --reload --port 8080L'application démarre sur http://localhost:8080.
FastAPI génère automatiquement une documentation interactive accessible à http://localhost:8080/docs.
Une seconde vue (Redoc) est disponible à http://localhost:8080/redoc.
La base de données est en mémoire (dictionnaire Python) et est initialisée au démarrage via app/store.py avec deux todos de démonstration.
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /todos |
Liste tous les todos |
Exemple :
curl http://localhost:8080/todos# Tous les tests
pytest
# Une classe spécifique
pytest tests/test_routes.py
# Une méthode spécifique
pytest tests/test_routes.py::test_should_return_todos_as_json_when_todos_existL'objectif est de générer du code à partir d'un prompt pour ajouter, supprimer, mettre à jour et lire un TODO.
L'endpoint GET /todos est déjà implémenté comme exemple. À toi de compléter l'API en utilisant un assistant IA (Claude Code, GitHub Copilot, etc.).
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /todos/{id} |
Récupérer un todo par son id |
| POST | /todos |
Créer un nouveau todo |
| PUT | /todos/{id} |
Mettre à jour un todo |
| DELETE | /todos/{id} |
Supprimer un todo |
Récupérer un todo par son id
# Doit retourner le todo avec id=1 (HTTP 200)
curl http://localhost:8080/todos/1
# Doit retourner une erreur (HTTP 404)
curl http://localhost:8080/todos/999Créer un nouveau todo
# Doit retourner le todo créé avec son id généré (HTTP 201)
curl -X POST http://localhost:8080/todos \
-H "Content-Type: application/json" \
-d '{"title": "Mon nouveau todo", "completed": false}'Mettre à jour un todo
# Doit retourner le todo mis à jour (HTTP 200)
curl -X PUT http://localhost:8080/todos/1 \
-H "Content-Type: application/json" \
-d '{"title": "Apprendre FastAPI", "completed": true}'
# Doit retourner une erreur (HTTP 404)
curl -X PUT http://localhost:8080/todos/999 \
-H "Content-Type: application/json" \
-d '{"title": "Inexistant", "completed": false}'Supprimer un todo
# Doit retourner HTTP 204 (pas de contenu)
curl -X DELETE http://localhost:8080/todos/1
# Vérifier que le todo a bien été supprimé (doit retourner HTTP 404)
curl http://localhost:8080/todos/1app/
├── __init__.py
├── main.py # Point d'entrée FastAPI (app + lifespan)
├── routes.py # APIRouter + handlers
├── schemas.py # Modèles Pydantic
└── store.py # Stockage en mémoire + données de seed
SPOILERS
Exercice — Recherche & filtrage
# Filtrer par statut completed
curl "http://localhost:8080/todos?completed=true"
curl "http://localhost:8080/todos?completed=false"
# Recherche par mot-clé dans le titre
curl "http://localhost:8080/todos?search=courses"
# Combinaison des deux
curl "http://localhost:8080/todos?completed=false&search=urgent"Exercice — Labels/Tags
# Créer un label
curl -X POST http://localhost:8080/labels \
-H "Content-Type: application/json" \
-d '{"name": "urgent", "color": "#FF0000"}'
# Lister tous les labels
curl http://localhost:8080/labels
# Associer un label à un todo (ex: todo id=1, label id=1)
curl -X POST http://localhost:8080/todos/1/labels/1
# Voir un todo avec ses labels
curl http://localhost:8080/todos/1
# Retirer un label d'un todo
curl -X DELETE http://localhost:8080/todos/1/labels/1
# (bonus) Filtrer les todos par label
curl "http://localhost:8080/todos?label_id=1"Réponse attendue pour GET /todos/1 :
{
"id": 1,
"title": "Faire les courses",
"completed": false,
"labels": [
{ "id": 1, "name": "urgent", "color": "#FF0000" }
]
}