2.5 KiB
2.5 KiB
作品作者按用户 ID 解析设计 2026-04-30
背景
作品列表、公开广场和详情页需要展示作者信息。旧链路里部分作品表会同时写入 author_display_name,如果用户后续修改昵称,旧作品仍会显示发布时的昵称快照,造成作者信息不一致。
目标
- 作品作者的真相源统一使用
owner_user_id。 - API 返回作品读模型时,通过
owner_user_id读取账号公开资料,并使用最新display_name作为authorDisplayName。 author_display_name暂时保留为历史兼容字段,只在用户资料不存在或读取失败时作为回退值。- 前端详情页优先展示按
ownerUserId读取到的公开用户资料;作品字段里的作者名只作为兜底展示。
落地规则
SpacetimeDB 存储
custom_world_profile.owner_user_id/custom_world_gallery_entry.owner_user_id是 RPG 作品作者 ID。puzzle_work_profile.owner_user_id是拼图作品作者 ID。big_fish_creation_session.owner_user_id是大鱼吃小鱼作品作者 ID。- 现有
author_display_name不再作为作者真相源,不新增依赖它做权限、同作者推荐或作者资料展示的逻辑。 - 本次不删除
author_display_name,避免破坏历史迁移包、生成绑定和旧客户端兼容;后续若要删除,必须单独做 schema 迁移和绑定刷新。
API facade
- 输出
authorDisplayName时先用owner_user_id查询认证用户表。 - 查询成功时使用用户最新
display_name,并同步补齐public_user_code。 - 查询失败或用户缺失时才回退作品表旧
author_display_name。 - 大鱼吃小鱼公开作品不再由前端硬编码作者名,API 根据
owner_user_id输出作者显示名。
前端
- 统一作品详情页已按
ownerUserId读取公开用户摘要,用于头像和作者名。 - 详情页展示作者名时优先使用公开用户摘要的
displayName,缺失时回退作品读模型的authorDisplayName。 - 新增作品类型接入平台详情页时,不允许只在前端写固定作者昵称。
验收点
- 用户修改昵称后,RPG / 拼图 / 大鱼公开作品列表与详情页能展示新昵称。
- 旧作品缺少可读取用户资料时,仍能用历史
author_display_name或“玩家”兜底。 - 作品权限和“同作者”判断继续使用
owner_user_id。 - 本次不改变 SpacetimeDB 表结构,因此不需要调整
migration.rs白名单或导入补字段逻辑。