codex2
This commit is contained in:
83
MIGRATION_GUIDE.md
Normal file
83
MIGRATION_GUIDE.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Migration JSON -> Database (Phase 2)
|
||||
|
||||
Guide pour migrer des resultats JSON existants (Phase 1) vers PostgreSQL (Phase 2).
|
||||
|
||||
## Prerequis
|
||||
|
||||
- PostgreSQL + Redis operationnels
|
||||
- Dependencies installees (`pip install -e .`)
|
||||
- Migration DB appliquee (`alembic upgrade head`)
|
||||
|
||||
## 1) Verifier la configuration
|
||||
|
||||
Copier l'exemple et ajuster les identifiants si besoin:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Verifier la configuration:
|
||||
|
||||
```bash
|
||||
pricewatch doctor
|
||||
```
|
||||
|
||||
## 2) Initialiser la base
|
||||
|
||||
Si la base n'est pas encore initialisee:
|
||||
|
||||
```bash
|
||||
pricewatch upgrade
|
||||
```
|
||||
|
||||
Verifier les tables:
|
||||
|
||||
```bash
|
||||
psql -h localhost -U pricewatch pricewatch
|
||||
\dt
|
||||
```
|
||||
|
||||
## 3) Migrer un fichier JSON existant
|
||||
|
||||
Le JSON de Phase 1 est deja conforme au schema `ProductSnapshot`. Il suffit de le recharger puis de repasser par la persistence.
|
||||
|
||||
### Option A: Script rapide
|
||||
|
||||
Creer un petit script ad-hoc (exemple):
|
||||
|
||||
```python
|
||||
from pricewatch.app.core.io import read_json_results
|
||||
from pricewatch.app.scraping.pipeline import ScrapingPipeline
|
||||
|
||||
snapshots = read_json_results("scraped_store.json")
|
||||
|
||||
pipeline = ScrapingPipeline()
|
||||
for snapshot in snapshots:
|
||||
pipeline.process_snapshot(snapshot, save_to_db=True)
|
||||
```
|
||||
|
||||
Execution:
|
||||
|
||||
```bash
|
||||
python migrate_json.py
|
||||
```
|
||||
|
||||
### Option B: Enqueue via worker
|
||||
|
||||
Si vous voulez traiter les snapshots via worker, utilisez une boucle qui enqueue `scrape_product` avec l'URL du snapshot, puis laissez le worker tourner. Cela garantira un refresh complet (fetch + parse + DB) au lieu d'inserer uniquement le JSON.
|
||||
|
||||
## 4) Verifier les donnees
|
||||
|
||||
```bash
|
||||
psql -h localhost -U pricewatch pricewatch
|
||||
SELECT COUNT(*) FROM products;
|
||||
SELECT COUNT(*) FROM price_history;
|
||||
SELECT COUNT(*) FROM scraping_logs;
|
||||
```
|
||||
|
||||
## 5) Notes importantes
|
||||
|
||||
- Si `reference` est absente, la persistence du produit est ignoree, mais un `ScrapingLog` est cree.
|
||||
- La contrainte d'unicite `(source, reference)` evite les doublons.
|
||||
- Les images/specs sont synchronises par ajout/ups ert (pas de suppression automatique).
|
||||
- En cas d'erreur DB, le snapshot est conserve et une note est ajoutee dans `snapshot.debug.notes`.
|
||||
Reference in New Issue
Block a user