1.8 KiB
1.8 KiB
SpacetimeDB HTTP SQL SATS 值后台展示处理
本参考用于 Genarrative 后台通过 SpacetimeDB HTTP SQL 读取表明细并展示/导出时,处理 SQL rows 中的 SATS 原始 JSON 值。
典型现象
读取 private table(例如 tracking_event)后,HTTP SQL 可能返回如下原始形态:
- enum:
RuntimeTrackingScopeKind::User返回[3, []] Option<String>::Some("user_00000001")返回[0, "user_00000001"]Option<String>::None返回[1, []]Timestamp返回[1778207451731746]
如果直接 value.to_string() 展示,后台会出现 [3,[]]、[0,"..."]、[1,[]]、[1778207451731746],运营不可读。
推荐处理
- 后端解析层优先标准化:
- Option:
[0, value] -> value,[1, []] -> None - enum:按生成 binding 的 variant 顺序映射,例如
RuntimeTrackingScopeKind为site/work/module/user,索引0/1/2/3分别对应这些字符串 - Timestamp:单元素数组
[micros] -> "micros"
- Option:
- 前端展示层再格式化时间:
- 纯数字时间戳按微秒处理:
Date(Math.floor(micros / 1000)) - ISO 字符串用
new Date(value) - 展示为
YYYY-MM-DD HH:mm:ss
- 纯数字时间戳按微秒处理:
- 列表、详情弹窗、Excel 导出必须使用同一套格式化结果,避免导出仍残留 SATS 原始值。
- 增加单测覆盖 SATS 原始 rows,至少断言:
[3, []] -> user[0, "user"] -> Some("user")[1, []] -> None[1778207451731746] -> "1778207451731746"
验收建议
cargo test -p api-server admin_tracking -- --nocapturenpm run admin-web:typechecknpm run admin-web:buildnpm run check:encodinggit diff --check
注意
不同 enum 的 variant 顺序必须以生成 binding 或 module 源码为准,不能复用其他 enum 的索引映射。