Skip to content

Sounayy/coding-dojo-ia-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coding Dojo IA — Backend Python

Application FastAPI servant de support au coding dojo sur la génération de code assistée par IA.

Prérequis

  • Python 3.12+
  • pip

Lancer le projet en local

# 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 8080

L'application démarre sur http://localhost:8080.

Documentation interactive (Swagger UI)

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.

API existante

Méthode Endpoint Description
GET /todos Liste tous les todos

Exemple :

curl http://localhost:8080/todos

Lancer les tests

# 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_exist

Exercice — Générer du code avec l'IA

L'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.).

Endpoints à implémenter

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

Tester son implémentation avec curl

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/999

Cré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/1

Structure du projet

app/
├── __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

Exercices suivants (spoilers — à ne pas lire avant d'avoir terminé le CRUD)

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" }
  ]
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages