Loading
feat(traffic-influence): add CAMARA -> SRM activate/deactivate mapper
Summary
Implements the CAMARA Traffic Influence API on top of refactor/qod's async operation/SRM plumbing, following the same pattern established for QoD sessions: POST kicks off an async SRM activation via the databus, event.srm.operation.completed resolves it, and DELETE drives deactivation the same way.
- Domain model, persistence layer (mappers, repo, SQL), and ports for
TrafficInfluence - CAMARA request/response schemas and the vwip swagger definition for
traffic-influence - SRM client read methods and CAMARA → SRM activate/deactivate command mappers
TrafficInfluenceServicecovering create (async activate), delete (async deactivate + guards), and list/get-by-id- Router + DI wiring, and the event.srm.operation.completed dispatcher extended to complete traffic-influence operations
- Idempotency-Key support on POST /traffic-influences: replays the original response on a retry with the same key, returns 409 if the key was already used for a different operation, and lets distinct keys create distinct resources
- Fakes/fixtures mirroring the QoD test setup, plus flow tests for POST/GET/DELETE and idempotency
Known gap
- GET /traffic-influences/{id} is a synchronous SRM call against an endpoint that isn't documented in architecture/srm/interface-contract.md §E (no network-capability read endpoint), and OEG's minted trafficInfluenceID has no reconciled mapping to SRM's external_ref yet. The corresponding test (test_get_traffic_influence_returns_created_resource) is skipped.
Test plan Unit/flow tests for POST/GET/DELETE and idempotency (tests/unit/test_traffic_influence_flows.py) mypy resolves first-party imports from src/-only invocations (mypy_path fix) GET-after-POST remains skipped pending the SRM contract gap above