mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-07 16:48:45 +08:00
配额 fetcher 缓存未命中时账号被加载两次:fetchUncached GetByID 一次, 下游数据源(GetUsage / CN QueryUsage / CN QueryBalance)按 ID 再各自 GetByID 一次——每次 GetByID 含 proxies/groups 联查,纯属重复劳动。 统一改为「路由前加载一次、指针直传」: - fetcher 三个数据源接口签名改收 *Account: GetUsageForAccount / QueryUsageForAccount / QueryBalanceForAccount - AccountUsageService 暴露 GetUsageForAccount 直通(getUsageForAccount 既有逻辑零改动) - CN 两侧服务抽 validateCodingPlanAccount / validatePayGAccount (加载后校验原样),新 ForAccount 入口 = NOT_CONFIGURED 守卫 → 校验 → singleflight → 探测;ID 入口 = load + 委托,语义不变 - singleflight key 保持 "cn_quota:<id>" / "cn_balance:<id>":ForAccount 与 admin handler 的 ID 入口并发探测仍按账号合并 - cn_provider_balance_check_service.checkOne 刻意留在 ID 入口:调度器 路径按 ID 取的是最新凭据,不复用可能已过期的已加载账号 校验移到 flight 之外且 ForAccount 复用同一套校验,直传无法绕过 平台/模式检查;专项测试固化(无效账号零出站请求、单次加载指针直传 require.Same)。