# 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`.