ammocpr/lib
Graham McIntire 2efb35dc48
Stop scrape chain from dying on a single bad product
A scraped product with nil price_per_round_cents made Prices.create_snapshot
return {:error, changeset}, which blew up the {:ok, _} match in the runner,
crashed the whole perform, and after 3 retries discarded the job. Nothing
reseeds the chain once the job is discarded, so prod scrapes silently died
on Mar 17 and stayed dead until the app was restarted.

- Runner handles snapshot insert errors by logging and continuing instead
  of raising.
- ScrapeJob wraps each Runner.run in try/rescue so one retailer crashing
  doesn't take down the whole cycle.
- ScrapeJob moves schedule_next into an after block so the chain is always
  reseeded, even if the scrape loop crashes.
2026-04-22 15:51:15 -05:00
..
ammoprices Stop scrape chain from dying on a single bad product 2026-04-22 15:51:15 -05:00
ammoprices_web Add chart empty state and home-page real-time price refresh 2026-04-22 15:28:02 -05:00
ammoprices.ex Initial implementation of ammo price tracker 2026-03-11 15:58:12 -05:00
ammoprices_web.ex Initial implementation of ammo price tracker 2026-03-11 15:58:12 -05:00