Skip to content

数据流

text
相关代码: src/services/api.ts, server/proxyRoutes.ts

SKU 管理数据流

获取 SKU 列表

技术债务

N+1 查询是当前的性能瓶颈。理想情况下,列表接口应该返回 availabledisplayOrder 字段。

创建 SKU

用户数据流

获取用户订单

数据转换

EAV → 扁平结构

输入 (Leopard API):
{
  "id": "sku-123",
  "specName": "GPU-8x-A100",
  "price": "1000000",
  "specFields": [
    { "key": "gpu-model", "value": "A100" },
    { "key": "gpu-count", "value": "8" },
    { "key": "memory", "value": "131072" }
  ]
}

输出 (前端 SKU):
{
  "id": "sku-123",
  "name": "GPU-8x-A100",
  "price": 1000000,
  "gpuModel": "A100",
  "gpuCount": "8",
  "memory": "131072"
}

单位转换表

字段API 存储前端显示转换
price微元÷ 1,000,000
memoryMBGB÷ 1024
gpuMemoryMBGB÷ 1024
vgpuMemoryMBGB÷ 1000
timestampUnix ms (string)Datenew Date(parseInt(x))

请求路径映射

管理员 API

前端路径后端路径
/api/leopard/products/skus/apis/leopard.io/v1alpha1/products/skus
/api/leopard/products/sku-infos/{id}/apis/leopard.io/v1alpha1/products/sku-infos/{id}
/api/ghippo/users/apis/ghippo.io/v1alpha1/users

用户代理 API

前端路径后端路径
/proxy/users/{id}/orders/apis/leopard.io/v1alpha1/orders
/proxy/users/{id}/bills/apis/leopard.io/v1alpha1/bills
/proxy/users/{id}/wallet/balance/apis/leopard.io/v1alpha1/wallet/balance
/proxy/users/{id}/vouchers/apis/leopard.io/v1alpha1/vouchers/active

错误处理

前端

typescript
api.interceptors.response.use(
  (response) => response,
  (error) => {
    console.error('API Error:', error.response?.data || error.message)
    return Promise.reject(error)
  }
)

代理层

typescript
proxyReq.on('error', (e) => {
  console.error('[Proxy] Request error:', e)
  res.status(500).json({ error: 'Proxy error', detail: String(e) })
})

缓存策略

数据缓存位置TTL说明
用户 Token内存 + 文件1 小时tokenManager
产品列表React State页面生命周期useProducts
区域列表React State页面生命周期useRegions
SKU 列表无缓存-每次请求获取