fire-planner/fire_planner/api
Viktor Barzin 4a0ef1faf6
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
fire-planner: filterable date range on the home-page history chart
User asked for a manual date range on the Dashboard chart instead of
the hard-coded 12-month window.

Backend (/networth/history):
- Read LIVE from wf_sync's daily_account_valuation JOIN accounts so the
  chart spans the broker's full daily series. The account_snapshot
  cache is only the latest snapshot — never had >2 daily points for
  charting. Falls back to the cache when wf_sync isn't wired (tests).
- Accept `from=YYYY-MM-DD` and `to=YYYY-MM-DD` query params. When `from`
  is set, the window is [from, to or today] (inclusive). Otherwise the
  legacy `days` look-back still applies. 422 when from > to.

Frontend:
- New HistoryRangePicker component: preset buttons (1m / 3m / 6m / 1y /
  3y / All) plus two date inputs for an explicit custom range.
- Dashboard wires the picker to the chart via react-query keyed on the
  selected range, so the chart re-fetches on change.

Tests:
- Renamed `respects_days_filter` → `respects_from_to_filter` and added
  inverted-window rejection. Old test asserted "days=1 returns 1 point"
  which only worked when 'today' was within the seed window — the new
  windowing is correct and explicit.

271 → 272 tests passing.
2026-05-28 09:04:58 +00:00
..
__init__.py api: expand FastAPI surface for scenarios, networth, life-events, goals, simulate 2026-05-09 21:48:36 +00:00
auth.py api: expand FastAPI surface for scenarios, networth, life-events, goals, simulate 2026-05-09 21:48:36 +00:00
cashflow.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
dependencies.py fire-planner: lazy-refresh /networth from wf_sync (default TTL 1d) 2026-05-27 18:21:12 +00:00
goals.py api: drop bearer-token gate from /api/* CRUD + simulate 2026-05-09 23:56:37 +00:00
income_streams.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
life_events.py api: drop bearer-token gate from /api/* CRUD + simulate 2026-05-09 23:56:37 +00:00
networth.py fire-planner: filterable date range on the home-page history chart 2026-05-28 09:04:58 +00:00
progress.py fire-planner: lazy-refresh /networth from wf_sync (default TTL 1d) 2026-05-27 18:21:12 +00:00
scenarios.py fire-planner: UX review pass 1 — fix sidebar/route/PATCH/badges issues 2026-05-10 17:17:55 +00:00
schemas.py col: simulator auto-adjusts spending to local prices via Numbeo+Expatistan 2026-05-22 14:14:57 +00:00
simulate.py col: simulator auto-adjusts spending to local prices via Numbeo+Expatistan 2026-05-22 14:14:57 +00:00
spending.py whatif: live data refresh, inflation-adjusted spending, legend fix 2026-05-10 11:27:22 +00:00
spending_profile.py fire-planner: What-If gains the chart-first scenario editor 2026-05-12 19:35:28 +00:00
year_stats.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00