✅
TaskManager API
Projet intégrateur de la formation Python Backend. Construisez une API REST complète avec FastAPI, SQLAlchemy 2.x, Alembic, authentification JWT et déploiement Docker. Le fil rouge de toute la formation.
FastAPI
SQLAlchemy 2.x
Alembic
JWT
Pydantic v2
Docker
Projet Final
🗄️ Schéma de la base
users (id, username, email, password_hash, role, is_active, created_at)
↑ FK owner_id ↑ FK assignee_id
projects (id, title, description, owner_id, status, created_at)
↑ FK project_id
tasks (id, title, description, project_id, assignee_id, status, priority, due_date, created_at)
↑ FK task_id ↑ FK tag_id ↑ FK task_id ↑ FK author_id
task_tags (task_id, tag_id) tags (id, name, color) comments (id, task_id, author_id, content, created_at)
📦 Livrables attendus
🗄️ Base de données
- Modèles SQLAlchemy 2.x (Mapped)
- Relations (1:N, N:N avec task_tags)
- Migrations Alembic complètes
- Données de test via script seed.py
⚡ API FastAPI
- Auth JWT (register/login/me)
- CRUD Projects + Tasks
- Pagination + filtres
- Endpoint /api/v1/stats
🛡️ Validation & Sécurité
- Schémas Pydantic v2 complets
- Vérification ownership (IDOR)
- BaseSettings (.env)
- CORS configuré
🐳 Déploiement
- Dockerfile multi-stage
- docker-compose (app + postgres)
- Variables d'env (.env.example)
- Health check endpoint
🔌 Endpoints de l'API
| Méthode | URL | Description | Auth |
|---|---|---|---|
| POST | /api/v1/auth/register | Inscription | Non |
| POST | /api/v1/auth/login | Connexion → JWT | Non |
| GET | /api/v1/auth/me | Profil courant | ✓ |
| GET | /api/v1/projects | Mes projets | ✓ |
| POST | /api/v1/projects | Créer un projet | ✓ |
| GET | /api/v1/projects/:id | Détail + stats tâches | ✓ |
| PUT | /api/v1/projects/:id | Mettre à jour (owner) | ✓ |
| DELETE | /api/v1/projects/:id | Supprimer (cascade tasks) | ✓ |
| GET | /api/v1/projects/:id/tasks | Tâches paginées + filtres | ✓ |
| POST | /api/v1/projects/:id/tasks | Créer une tâche | ✓ |
| GET | /api/v1/tasks/:id | Détail + commentaires | ✓ |
| PUT | /api/v1/tasks/:id | Mettre à jour | ✓ |
| PATCH | /api/v1/tasks/:id/status | Changer le statut | ✓ |
| DELETE | /api/v1/tasks/:id | Supprimer | ✓ |
| GET | /api/v1/stats | KPIs globaux | ✓ |
| GET | /health | Health check + DB check | Non |
🚀 Phases de développement
1
Setup & Base de données
Configurer le projet, créer les modèles SQLAlchemy, lancer les migrations Alembic
2
Auth JWT
Implémenter register/login/me avec hachage bcrypt et tokens JWT
3
CRUD Projects & Tasks
Tous les endpoints avec pagination, filtres, vérification ownership
4
Stats & Health
Endpoint /stats avec agrégations, /health avec check DB
5
Docker & Déploiement
Dockerfile multi-stage, docker-compose avec PostgreSQL, variables d'env
▶ Lancer la solution
# Option 1 : avec Docker (recommandé)
cd solution
cp .env.example .env
docker compose up --build
# API disponible sur http://localhost:8000
# Docs OpenAPI : http://localhost:8000/docs
# Option 2 : sans Docker (SQLite)
cd solution
pip install -r requirements.txt
alembic upgrade head
python seed.py # charger les données de test
uvicorn app.main:app --reload
# Docs : http://localhost:8000/docs
✅ Critères de validation
- Routes authentifiées retournent 401 sans token valide
POST /auth/registeravec email déjà pris → 409 Conflict- Pagination
?page=2&limit=5retourne{data, total, page, pages} - Suppression d'un projet cascade sur ses tâches (vérifier en DB)
alembic upgrade heads'exécute sans erreurdocker compose up→ API disponible sur :8000/docsaffiche la documentation OpenAPI complète- Un utilisateur ne peut pas modifier le projet d'un autre (403)