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
  • TrafficInfluenceService covering 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

Merge request reports

Loading
Loading