rates/backend/services
jtricerolph cab1a39503 Auto-recheck parity after scrape + manual Recheck button + faster badge
Parity logic:
- Extract _fetch_latest_alerts() and _upsert_alerts() helpers so the alert
  upsert loop is no longer duplicated between the daily job and per-date runs
- Add run_parity_check_for_date(date) which runs the full comparison +
  alert upsert for a single date

Scraper integration:
- _safe_parity_recheck(date) wrapper (never raises) called after each
  successful date in both search-results and hotel-page workers; hotel-page
  mode waits until all hotels for the date are done before rechecking

API:
- POST /competitors/parity/check-date?rate_date=YYYY-MM-DD for manual recheck

Frontend:
- Recheck button on every parity alert row (all statuses); invalidates
  alerts list and badge count on success
- parity-alert-count badge polls every 15s (was 60s) so new alerts from
  the scheduled job or post-scrape rechecks appear quickly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-15 09:33:33 +00:00
..
direct_profiles Add fetch_category_names to Eviivo, QBook and Mews profiles 2026-07-10 13:00:19 +00:00
scraper_backends Use text-search approach for rate conditions (breakfast/cancel/payment) 2026-07-14 18:10:00 +00:00
__init__.py
booking_scraper.py Auto-recheck parity after scrape + manual Recheck button + faster badge 2026-07-15 09:33:33 +00:00
central_settings.py
direct_scraper.py
newbook_rates_client.py
proxy.py Block images via Chrome flag, not route interception; restore DataImpulse URL auth 2026-07-10 09:14:36 +00:00