pub async fn sub_acc_push(
__arg0: State<RestState>,
rec: Option<Extension<Arc<KeyRecord>>>,
__arg2: Json<Value>,
) -> Result<Json<Value>, (StatusCode, Json<Value>)>Expand description
v1.4.90 P1-C 修:POST /api/sub-acc-push — 订阅交易账户 push(订单 / 成交变动)
历史背景(外部 tester v1.4.69-89 报告 6 版 silent stub):
- 老版 handler 是单
proto_request透传 wrapper,无 input validation、 无 audit log、无 session_id token —— 用户 POST 后 daemon log 看不到任何 “本 endpoint 被调用过” 的痕迹(仅 gateway 侧 SubAccPushHandler 默默更 新SubscriptionManager.subscribe_trd_acc(conn_id, acc_id)), “ret=0 + s2c={}” 看似成功但下游全无可观测信号。
本次 (v1.4.90 P1-C) 对齐 MCP futu_sub_acc_push:
- Loud input validation(acc_id_list 必须非空 + 每个 id 非零;C++
IAPIServer_Trd_SubAccPush::OnClientReq_SubAccPush等价 check) - Audit log
tracing::info!留 endpoint + count + 头几个 acc_id 痕迹, 给 push_health 看不到的部分提供可观测性 - Backend CMD forward 经
proto_request(即 dispatch 到 gatewaySubAccPushHandler完成SubscriptionManager注册 + return ret=0) - Response augment:在标准 proto Response (
ret_type/s2c{}) 上补subscribed_acc_ids+session_id+unsub_hint,对齐 MCP{ok, subscribed_acc_ids, session_id, unsub_hint}输出形状。 REST stateless,session_id 用 sorted acc_ids hash 派生(确定性 token, 可拿来 POST/api/unsub-acc-push)
架构说明:本 daemon 内 gateway local SubAccPushHandler 即对齐
C++ APIServer 的 Trd_SubAccPush 处理点 —— 没有“再下一层 backend“
的 CMD 需要 forward。MCP 通过 TCP client.request(TRD_SUB_ACC_PUSH)
也是落到同一个 gateway handler。所以 “CMD forward” 的语义是 REST →
proto_request → RequestRouter::dispatch → SubAccPushHandler。