# suivi_produit Suite self-hosted pour suivre les prix et l'état des produits Amazon.fr (et autres stores à venir). ## Structure - `backend/` : API FastAPI + scraper Playwright + persistance SQLite - `frontend/` : SPA Gruvbox dark pour afficher les vignettes, graphiques et logs - `docker/` : fichiers nécessaires pour docker-compose + builds - `docs/`, `TODO.md`, `CHANGELOG.md`, `kanban.md` : documentation et suivi ## Objectif MVP 1. CRUD produits + historique des snapshots 2. Scraper Amazon via Playwright avec logs et artifacts 3. Interface responsive avec vignettes & graphique 30j 4. Configuration JSON frontend/backend rangée dans le repo 5. Docker Compose + scheduler interne pour lancer les scrapes ## Environnement 1. Copier `cp .env.example .env` avant tout lancement backend/tests. 2. Activer le venv : - `source .venv/bin/activate` - ou `poetry shell` 3. `poetry install` (backend) 4. `npm install` (frontend, à compléter) ## Tests - Toujours exécuter `poetry run pytest` dans l’environnement `.env` avant un `docker compose up`. - Test scraper en CLI (Playwright) : - `SCRAPE_TEST_MAX=0 .venv/bin/poetry run python backend/app/scraper/run_scrape_tests.py` - Optionnel (ouvrir le navigateur si blocage) : - `SCRAPE_TEST_HEADFUL_ON_BLOCK=1 SCRAPE_TEST_MAX=0 .venv/bin/poetry run python backend/app/scraper/run_scrape_tests.py` ## Audit code (imports / code mort) - Installer les outils (dans le venv) : - `.venv/bin/pip install ruff vulture coverage pip-check-reqs pyright` - Lancer l’audit : - `.venv/bin/ruff check backend/` - `.venv/bin/vulture backend/` - `.venv/bin/pip-check-reqs backend/` - `.venv/bin/coverage run -m pytest` - `.venv/bin/coverage report -m` ## Déploiement Docker ### Lancement rapide ```bash # Copier la configuration Docker cp .env.docker .env # Build et lancement docker compose up --build -d # Voir les logs docker compose logs -f ``` ### Services | Service | Port | Description | |---------|------|-------------| | frontend | 8080 | Interface web (Nginx) | | backend | 8008 | API FastAPI + Scheduler | ### Volumes persistants - `suivi_produit_data` : base SQLite + raw JSON (`backend/data/`) - `suivi_produit_logs` : fichiers de log (`backend/logs/`) ### Commandes utiles ```bash # Arrêter les services docker compose down # Reconstruire après modification docker compose up --build -d # Voir l'état des services docker compose ps # Accéder aux logs d'un service docker compose logs backend -f docker compose logs frontend -f # Backup de la base (volume Docker) docker run --rm -v suivi_produit_data:/data -v $(pwd):/backup alpine tar cvf /backup/data_backup.tar /data ``` ### Configuration Variables d'environnement (`.env`) : - `API_PORT` : port du backend (défaut: 8008) - `FRONTEND_PORT` : port du frontend (défaut: 8080) - `APP_ENV` : environnement (development/production) - `LOG_LEVEL` : niveau de log (DEBUG/INFO/WARNING/ERROR) ## Notes - Le scraping est volontairement lent (15-20 produits/jour) pour éviter le blocage. - Le raw JSON est conservé pendant 30 jours dans `backend/data/raw`. Voici les commandes pour lancer les services : Backend (port 8008) : cd /home/gilles/Documents/vscode/suivi_produit .venv/bin/python -m uvicorn backend.app.main:app --host 0.0.0.0 --port 8008 --reload Frontend (port 5173) : cd /home/gilles/Documents/vscode/suivi_produit/frontend npm run dev Ou en une seule commande avec Poetry pour le backend : poetry run uvicorn backend.app.main:app --host 0.0.0.0 --port 8008 --reload