Add Routing module: EvRoute, pricing, time slots, read API, caching (T3.1-T3.7)

Implements Phase 3 in full: EvRoute model with company/destination relations
and a from/to-must-differ guard; the ev_route_time_slots pivot; RoutePricing
with a per-route is_blocked flag (every route auto-manages exactly one price
row per vehicle option via a fixed-row Filament repeater on both create and
edit); PricingService::quote() with a shared VehicleOption enum; RoutingPlugin
with the EvRouteResource admin UI (activation gated on non-blocked options
being priced); the /api/v1/routes read API (list/show/pricing/time-slots,
AI-agent-friendly nested shape); and Redis-tag-based response caching
invalidated via EvRoute/RoutePricing observers.
This commit is contained in:
Nyan Lin Paing
2026-08-06 23:49:42 +07:00
parent 7872105f2f
commit 4da9ecfe7d
38 changed files with 1588 additions and 2 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ pest()->extend(TestCase::class)
pest()->extend(TestCase::class)
->use(RefreshDatabase::class)
->in('../app-modules/*/tests/Feature');
->in('../app-modules/*/tests/Feature', '../app-modules/*/tests/Unit');
/*
|--------------------------------------------------------------------------