tracksolid_timescale_grafan.../migrations
david kiania 6cf0905b31 feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3)
Adds the read-only /analytics/* surface the FleetOps SPA will consume, plus
the migration that backs the fuel roll-up. All endpoints SELECT the indexed
reporting.* / tracksolid.v_* views and never write, so the forthcoming staging
instance can serve them against the prod DB as grafana_ro.

dashboard_api_rev.py:
  - GET /analytics/fleet-summary     per-vehicle + per-cost-centre roll-up
  - GET /analytics/utilisation       per-vehicle utilisation + daily fleet trend
  - GET /analytics/driver-behaviour  per-driver speeding / harsh index
  - GET /analytics/fuel              actual vs estimated litres (data-gated flags)
  - GET /analytics/filters           dropdown options (alias of GET /webhook/fleet-dashboard)
  - responses run through jsonable_encoder (Decimal->float, date->ISO)
  - VTRIPS_REFRESH_INTERVAL_S<=0 now DISABLES the v_trips refresher, so a
    read-only staging instance never attempts REFRESH (prod still owns it).

migrations/17_fleetops_fuel_view.sql:
  - reporting.v_fuel_daily encapsulates the v_trips->devices join (so the
    read-only role needs SELECT only on the view) and grants it to grafana_ro.

Registered 17 in run_migrations.py. Note: live migration head is 16, not 13
as CLAUDE.md implies. Endpoints are unit-compilable but untested live until
the staging bridge (Phase 1) exists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 12:12:00 +03:00
..
02_tracksolid_full_schema_rev.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
03_webhook_schema_migration.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
04_bug_fix_migration.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
05_enhancement_migration.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
06_business_analytics_migration.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
07_analytics_views.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
08_analytics_config.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
09_trips_enrichment.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
10_driver_clock_views.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
10_pgbouncer_auth.sql chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
11_reporting_schema.sql feat(db): capture reporting.* map-dashboard schema as migration 11 2026-06-05 12:32:44 +03:00
12_drop_ops.sql chore(db): purge unused ops + dwh_gold schemas 2026-06-05 18:11:03 +03:00
13_drop_dwh_gold.sql chore(db): purge unused ops + dwh_gold schemas 2026-06-05 18:11:03 +03:00
14_fleet_segment_and_vehicles_view.sql feat(reporting): fleet segmentation + deduped vehicle roster (migration 14) 2026-06-08 13:54:47 +03:00
15_map_exclude_cost_centres.sql feat(reporting): exclude non-operational vehicles from the live map (migration 15) 2026-06-08 14:18:30 +03:00
16_live_feed_vehicle_type.sql feat(reporting): add vehicle_type + fleet_segment to live map feed (migration 16) 2026-06-08 14:33:21 +03:00
17_fleetops_fuel_view.sql feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3) 2026-06-10 12:12:00 +03:00