Ajoute backend/app/api/shopping.py avec les routes :
- GET/POST /api/shopping/lists
- GET/PATCH/DELETE /api/shopping/lists/{id}
- POST/PATCH/DELETE /api/shopping/lists/{id}/items
- GET /api/shopping/stores
- GET /api/shopping/products
- POST /api/shopping/lists/{id}/finish (report des articles non cochés)
Enregistre le router dans main.py avec le prefix /api/shopping.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Changer due_after/due_before de str | None vers datetime | None pour typage FastAPI
- FastAPI parse et valide automatiquement, retourne 422 si format invalide (pas 500)
- Supprimer le parsing manuel datetime.fromisoformat() qui levait ValueError brute
- Ajouter ORDER BY déterministe: due_date ASC NULLS LAST, created_at DESC
évite les réordonnances aléatoires entre requêtes PostgreSQL
Tests: 15/15 passent ✓
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajoute les 5 endpoints REST (list, create, update, delete, postpone),
enregistre le routeur sur /api/todos, et corrige l'isolation des sessions
de test via NullPool + dependency_overrides dans conftest.py.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajoute les schémas Pydantic TodoCreate/TodoUpdate/PostponeRequest/TodoResponse,
la fixture db_session dans conftest, et 9 tests d'intégration contre PostgreSQL
réel — tous en échec car les endpoints /api/todos/ n'existent pas encore.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Corrige le seed pour vérifier l'existence des tables avant insertion
(évite l'échec au démarrage si les migrations n'ont pas encore été appliquées)
- Ajuste le port frontend de 3000 à 3001 (port 3000 occupé sur l'hôte)
- Migrations Alembic : schémas notes, shopping, todos créés avec succès
- Seed : 114 produits et 9 magasins chargés
- Endpoint /api/health : {"status":"ok"}
- Tests : 6/6 passent (health + media)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implémentation TDD : test écrit en premier (phase rouge), puis
app.main, app.api.health et app.api.media créés pour le faire passer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>