# 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