7.8 KiB
Executable File
7.8 KiB
Executable File
TODO - PriceWatch
Liste des tâches priorisées pour le développement de PriceWatch.
Légende
- À faire
- Terminé
- [~] En cours
Phase 1 : Fondations CLI
Étape 1 : Documentation et structure
- Créer README.md complet
- Créer TODO.md (ce fichier)
- Créer CHANGELOG.md
- Créer structure des dossiers du projet
- Créer pyproject.toml avec dépendances
Étape 2 : Modèle de données
- Implémenter ProductSnapshot (Pydantic) dans core/schema.py
- Champs métadonnées (source, url, fetched_at)
- Champs produit (title, price, currency, shipping_cost, stock_status, reference, images, category, specs)
- Champs debug (method, errors, notes, status)
- Validation et serialization JSON
Étape 3 : Core utilitaires
- Implémenter core/logging.py
- Configuration logger avec niveaux (DEBUG, INFO, ERROR)
- Formatage des logs
- Implémenter core/io.py
- Lecture YAML (scrap_url.yaml)
- Écriture JSON (scraped_store.json)
- Validation des fichiers
Étape 4 : Architecture des stores
- Implémenter BaseStore abstrait (stores/base.py)
- Méthode match(url) -> float
- Méthode canonicalize(url) -> str
- Méthode extract_reference(url) -> str
- Méthode fetch(url, method, options) -> str
- Méthode parse(html, url) -> ProductSnapshot
- Implémenter Registry (core/registry.py)
- Enregistrement dynamique des stores
- Détection automatique du store depuis URL
- Méthode get_best_store(url)
Étape 5 : Scraping
- Implémenter scraping/http_fetch.py
- Fonction fetch_http(url, timeout, headers)
- Gestion des erreurs (403, timeout, connexion)
- User-Agent rotation
- Logging détaillé
- Implémenter scraping/pw_fetch.py
- Fonction fetch_playwright(url, options)
- Support headless/headful
- Sauvegarde HTML optionnelle
- Screenshot optionnel
- Timeout configurable
- Logging détaillé
Étape 6 : Store Amazon
- Créer structure stores/amazon/
- Implémenter stores/amazon/store.py (AmazonStore)
- match() : détection amazon.fr/amazon.com
- canonicalize() : nettoyage URL vers /dp/{ASIN}
- extract_reference() : extraction ASIN
- parse() : parsing HTML vers ProductSnapshot
- Créer stores/amazon/selectors.yml
- Sélecteurs pour title
- Sélecteurs pour price
- Sélecteurs pour currency
- Sélecteurs pour shipping_cost
- Sélecteurs pour stock_status
- Sélecteurs pour images
- Sélecteurs pour category
- Sélecteurs pour specs
- Ajouter fixtures HTML dans stores/amazon/fixtures/
Étape 7 : Store Cdiscount
- Créer structure stores/cdiscount/
- Implémenter stores/cdiscount/store.py (CdiscountStore)
- match() : détection cdiscount.com
- canonicalize() : nettoyage URL
- extract_reference() : extraction SKU
- parse() : parsing HTML vers ProductSnapshot
- Créer stores/cdiscount/selectors.yml
- Sélecteurs pour tous les champs ProductSnapshot
- Ajouter fixtures HTML dans stores/cdiscount/fixtures/
Étape 8 : CLI
- Implémenter cli/main.py avec Typer
- Commande
pricewatch run - Commande
pricewatch detect - Commande
pricewatch fetch - Commande
pricewatch parse - Commande
pricewatch doctor - Flag --debug global
- Logging vers console
- Commande
Étape 9 : Tests
- Configurer pytest dans pyproject.toml
- Tests core/schema.py (29 tests - 100% coverage)
- Validation ProductSnapshot
- Serialization JSON
- Tests core/registry.py (40 tests - 100% coverage)
- Enregistrement stores
- Détection automatique
- Tests d'intégration avec 4 stores réels
- Tests core/io.py (36 tests - 97% coverage)
- Lecture/écriture YAML/JSON
- Sauvegarde debug HTML/screenshots
- Tests stores/amazon/ (33 tests - 89% coverage)
- match() avec différentes URLs
- canonicalize()
- extract_reference()
- parse() sur fixtures HTML
- Tests stores/cdiscount/ (30 tests - 72% coverage)
- Tests complets avec fixtures réels
- Tests stores/backmarket/ (25 tests - 85% coverage)
- Tests complets avec fixtures réels
- Tests stores/aliexpress/ (32 tests - 85% coverage)
- Tests complets avec fixtures réels
- Tests scraping/ (42 tests)
- http_fetch avec mock (21 tests - 100% coverage)
- pw_fetch avec mock (21 tests - 91% coverage)
Étape 10 : Intégration et validation
- Créer scrap_url.yaml exemple
- Tester pipeline complet YAML → JSON
- Tester avec vraies URLs Amazon
- Tester avec vraies URLs Cdiscount
- Vérifier tous les modes de debug
- Valider sauvegarde HTML/screenshots
- Documentation finale
✅ PHASE 1 TERMINÉE À 100%
État final: 295 tests passent / 295 tests totaux (100%) Coverage global: 76%
Détail par module:
- ✅ core/schema.py: 100% coverage
- ✅ core/registry.py: 100% coverage (40 tests)
- ✅ core/io.py: 97% coverage (36 tests)
- ✅ scraping/http_fetch.py: 100% coverage (21 tests)
- ✅ scraping/pw_fetch.py: 91% coverage (21 tests)
- ✅ stores/amazon/: 89% coverage (33 tests)
- ✅ stores/aliexpress/: 85% coverage (32 tests)
- ✅ stores/backmarket/: 85% coverage (25 tests)
- ✅ stores/cdiscount/: 72% coverage (30 tests)
4 stores opérationnels: Amazon, Cdiscount, Backmarket, AliExpress
Phase 2 : Base de données (Terminee)
Persistence
- Schéma PostgreSQL
- Migrations Alembic
- Models SQLAlchemy
- Connexion DB (engine, session, init)
- Tests DB de base
- Repository pattern (ProductRepository)
- ScrapingPipeline (persistence optionnelle)
- CLI
--save-db/--no-db - Tests end-to-end CLI + DB
- Tests backward compatibility (
--no-db) - Tests performance (100+ produits)
- CRUD produits
- Historique prix
Documentation
- Migration guide (JSON -> DB)
Configuration
- Fichier config (DB credentials)
- Variables d'environnement
- Docker Compose PostgreSQL/Redis
Phase 3 : Worker et automation (En cours)
Worker
- Setup Redis
- Worker RQ
- Queue de scraping
- Tests worker + scheduler
- Gestion erreurs Redis (RedisUnavailableError)
- Retry policy
Planification
- Cron ou scheduler intégré
- Scraping quotidien automatique
- Logs des runs (JOB START/OK/FAILED)
- Tests end-to-end worker + DB
- Tests end-to-end CLI -> DB -> worker
Phase 3 : API REST (En cours)
API FastAPI
- Endpoints read-only (products, prices, logs, health)
- Auth token simple (Bearer)
- Endpoints enqueue/schedule
- CRUD products + prices + logs
- Docker + uvicorn + config env
- Tests API de base
- Filtres avances (prix, dates, stock, status)
- Exports CSV/JSON (products, prices, logs)
- Webhooks (CRUD + test)
Phase 4 : Web UI (Future)
Backend API
- FastAPI endpoints
- Authentification
- CORS
Frontend
- Framework (Vue 3 + Vite)
- Design responsive (layout dense + compact)
- Dark theme Gruvbox (defaut) + Monokai
- Graphiques historique prix
- Gestion alertes
Phase 5 : Alertes (Future)
Notifications
- Système d'alertes (baisse prix, retour stock)
- Webhooks
- Push notifications
Améliorations techniques
Performance
- Cache Redis pour résultats
- Rate limiting par store
- Parallélisation scraping
Robustesse
- Retry automatique sur échec
- Circuit breaker
- Monitoring (Prometheus?)
Extensibilité
- Plugin system pour nouveaux stores
- Configuration stores externe
- API publique
Dernière mise à jour: 2026-01-15