Skip to content

将 sys_presence 系统对象定义纳入 service-realtime 软件包,完善 Presence 架构归属 #991

@xuyushun441-sys

Description

@xuyushun441-sys

背景

目前平台运行时在访问 sys_presence 时出现 no such table: sys_presence 错误。根据系统架构原则,所有以 sys_ 开头的系统对象都应以业务/协议领域归属到对应的软件包中。例如,sys_user 归属于 plugin-authsys_audit_log 归属于 plugin-audit

问题

当前 sys_presence 系统对象未正确注册,且归属和实现尚未标准化,影响 presence 相关的实时能力。

归属分析

  • Presence(在线状态)为实时协作核心概念,不宜放在 plugin-auth。
  • 参考 PresenceStateSchemaPresenceUpdateSchema 等协议定义,Presence 的全部协议均来源于 websocket/realtime 领域。
  • service-realtime 包名下应纳入 sys_presence 对象,作为其核心领域对象,负责 presence 的 schema 与运行时状态管理。

方案建议

  1. packages/services/service-realtime 下创建/注册 sys_presence 对象
    • 新建 src/objects/sys-presence.object.ts,字段应覆盖 PresenceState 协议定义(userId, sessionId, status, lastSeen, currentLocation, device, customStatus, metadata)。
    • 用标准 ObjectSchema 注册,注意复用协议字段定义,确保 schema 与前端 presence 协议兼容。
  2. 在 plugin 启动时注册该对象
    • 在 RealtimeServicePlugin 启动逻辑中 ctx.registerService() 时纳入 sys_presence
  3. SystemObjectName 中维护常量
    • 给出 PRESENCE: 'sys_presence' 常量,文档、API、权限、DSL 查询等均采用该 protocol name。
  4. ROADMAP.md/CHANGELOG.md 补充记录对象归属和接口清单

验证

  • 完成后运行全量测试以确保 runtime 对 presence 的查询、订阅、变更不会异常
  • ROADMAP.md/CHANGELOG.md 记录此次架构梳理行为

如需协助,可直接 @xuyushun441-sys

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions