- Add detailed 6-step development plan for frontend - Define architecture with React Router for multi-store evolution - Document API endpoints needed (existing + to create) - Update TODO.md and kanban.md with current status Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
Plan Frontend Phase 2 - suivi_produits
Date : 2026-01-18 Statut : Validé Priorité : Fonctionnel d'abord, puis visualisation
Contexte
Le backend (Phase 1) est terminé :
- Scraper Playwright fonctionnel (9/9 produits OK)
- API FastAPI avec CRUD produits complet
- Modèles SQLAlchemy (products, snapshots, scrape_runs)
- Scheduler APScheduler
- Tests unitaires (7 tests OK)
Le frontend est squelettique : App.jsx basique, ProductCard vide, pas de store.
Décisions de design
| Question | Choix |
|---|---|
| Priorité | Fonctionnel d'abord |
| Ajout produit | URL seule (backend extrait ASIN + scrape immédiat) |
| State management | Zustand |
| Page debug | Dès le début (utile pendant le dev) |
| Routing | React Router (évolutivité multi-stores) |
Architecture Frontend
frontend/src/
├── api/
│ └── client.js # API calls (extensible par store)
├── components/
│ ├── common/ # Composants réutilisables
│ │ ├── Modal.jsx
│ │ ├── Badge.jsx
│ │ └── PriceDisplay.jsx
│ ├── products/
│ │ ├── ProductCard.jsx
│ │ ├── ProductGrid.jsx
│ │ └── AddProductForm.jsx
│ └── debug/
│ ├── DbTable.jsx
│ └── LogViewer.jsx
├── pages/
│ ├── HomePage.jsx # Grille produits
│ ├── DebugPage.jsx # Tables + logs
│ └── SettingsPage.jsx # (futur) Config frontend/backend
├── stores/
│ └── useProductStore.js
├── hooks/ # (futur) Custom hooks
├── styles/
│ ├── _variables.scss # Couleurs Gruvbox
│ └── global.scss
├── App.jsx # React Router setup
└── main.jsx
Endpoints API
| Endpoint | Méthode | Statut | Description |
|---|---|---|---|
/products |
GET | Existe | Liste paginée |
/products |
POST | Existe | Créer produit |
/products/{id} |
GET/PUT/DELETE | Existe | CRUD |
/products/{id}/snapshots |
GET | À créer | Historique prix |
/products/{id}/scrape |
POST | À vérifier | Scrape un produit |
/scrape/all |
POST | À vérifier | Scrape tous |
/debug/tables |
GET | À créer | Dump tables SQLite |
/debug/logs |
GET | À créer | Derniers logs scrap |
Plan d'implémentation
Étape 1 : Page Debug (fondation)
Objectif : Avoir une vue sur les données pendant le développement
Backend :
- Créer endpoint
GET /debug/tables(dump products, snapshots, scrape_runs) - Créer endpoint
GET /debug/logs(lecturebackend/logs/scrap.log)
Frontend :
- Installer react-router-dom
- Setup React Router avec 2 routes (/, /debug)
- Créer
DebugPage.jsxavec composants DbTable et LogViewer - Afficher les 3 tables SQLite dans des sections distinctes
- Afficher les logs JSON de scraping
Étape 2 : Store Zustand + Liste produits
Objectif : Connexion frontend-backend fonctionnelle
Frontend :
- Installer zustand
- Créer
useProductStore.jsavec actions (fetch, add, delete, scrape) - Enrichir
client.jsavec toutes les fonctions fetch - Connecter
HomePage.jsxau store - Afficher les produits existants (version basique)
Étape 3 : Ajout de produit
Objectif : Permettre d'ajouter un produit via URL Amazon
Backend :
- Modifier
POST /productspour accepter juste l'URL - Extraire automatiquement l'ASIN de l'URL
- Déclencher scrape automatique après création
Frontend :
- Créer
Modal.jsx(composant réutilisable) - Créer
AddProductForm.jsx(input URL + validation) - Intégrer dans Header avec bouton "Add Product"
- Gestion loading/error dans l'UI
- Refresh automatique après ajout
Étape 4 : Actions sur produit
Objectif : Pouvoir scraper et supprimer un produit
Backend :
- Vérifier/créer endpoint
POST /products/{id}/scrape
Frontend :
- Ajouter boutons Scrap/Delete sur ProductCard
- Modal de confirmation avant suppression
- Feedback visuel pendant le scraping (spinner)
- Refresh automatique après action
Étape 5 : Amélioration visuelle ProductCard
Objectif : Vignette produit complète selon le schéma CLAUDE.md
Frontend :
- Image non tronquée (object-fit: contain)
- Section prix (actuel, conseillé, réduction)
- Badges (Prime, Choix Amazon, Deal, Exclusivité)
- Note + nombre d'avis
- Stock status
- Responsive grid (colonnes configurables via config_frontend.json)
Étape 6 : Graphique historique (Phase 2.5)
Objectif : Visualiser l'évolution des prix sur 30 jours
Backend :
- Créer endpoint
GET /products/{id}/snapshots
Frontend :
- Installer chart.js + react-chartjs-2
- Créer composant PriceChart
- Intégrer dans ProductCard
- Afficher min/max/tendance sous le graphique
- Couleurs selon tendance (vert baisse, orange stable, rouge hausse)
Thème visuel
Gruvbox vintage dark (défini dans CLAUDE.md) :
- Fond : #282828
- Cartes : #3c3836
- Texte : #ebdbb2
- Accent orange : #fe8019
- Accent jaune : #fabd2f
- Accent vert : #b8bb26
Icônes : Font Awesome
Critères de succès Phase 2
- Un utilisateur peut ajouter un produit via URL Amazon
- Le scraping se déclenche automatiquement
- Les produits s'affichent dans une grille responsive
- On peut supprimer un produit
- On peut déclencher un scrape manuel
- La page debug montre l'état des tables et logs