refactor: move server rs workspace entries into crates

This commit is contained in:
2026-04-21 11:01:25 +08:00
parent 5a60ab3972
commit f6bf5f665e
47 changed files with 244 additions and 233 deletions

View File

@@ -59,7 +59,7 @@
1. 上述 `12` 个模块是历史基线总量。
2. 本轮 active rewrite modules 固定为 `11` 个。
3. `editor` 仅保留历史事实,不进入 `server-rs` 主线 package 与阶段验收。
3. `editor` 仅保留历史事实,不进入 `server-rs` 主线 crate 与阶段验收。
## 3. 技术选型后的硬边界
@@ -200,16 +200,23 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
2. 高频变化数据优先事件表化
3. 聚合结果优先投影表 / view而不是频繁重塑旧表结构
### 5.5 主工程必须按多 package 方式组织模块
### 5.5 主工程必须按多 crate 方式组织模块
从当前版本开始Rust 后端固定采用“主工程 + 独立模块 package”的方式组织
从当前版本开始Rust 后端固定采用“主工程 crate + 独立模块 crate”的方式组织
1. `apps/api-server` 作为 Axum 主工程,只负责协议装配与模块组合。
2. `apps/spacetime-module` 作为 SpacetimeDB 主工程,只负责聚合各模块 package 的表、reducer、view。
3. 每个独立业务模块必须优先拥有自己的 workspace package再由主工程引用。
4. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 package。
这里再明确一层:
这样做的目的,是避免把当前 `12` 个既有模块边界重新压缩回单个“大 application package”或“大 domain package”中确保后续重写能继续按模块独立演进
1. `crates/` 只是工作区下统一承载 Rust crate 的目录名
2. 目录里的每个独立单元在 Rust 语义上都按 workspace crate 对待。
组织规则固定为:
1. `crates/api-server` 作为 Axum 主工程 crate只负责协议装配与模块组合。
2. `crates/spacetime-module` 作为 SpacetimeDB 主工程 crate只负责聚合各模块 crate 的表、reducer、view。
3. 每个独立业务模块必须优先拥有自己的 workspace crate再由主工程 crate 引用。
4. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 crate。
这样做的目的,是避免把当前 `12` 个既有模块边界重新压缩回单个“大 application crate”或“大 domain crate”中确保后续重写能继续按模块独立演进。
## 6. 推荐工程结构
@@ -218,22 +225,21 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
```text
server-rs/
├─ Cargo.toml
├─ apps/
│ ├─ api-server/ # Axum 主工程负责装配路由、中间件、SSE 与模块引用
─ spacetime-module/ # SpacetimeDB 主工程负责聚合表、reducer、view 并发布 wasm
├─ packages/
│ ├─ module-auth/ # 鉴权与会话模块 package
│ ├─ module-runtime/ # runtime snapshot / settings / profile 模块 package
│ ├─ module-story/ # story 主循环模块 package
│ ├─ module-combat/ # 战斗规则模块 package
│ ├─ module-inventory/ # 背包与奖励模块 package
│ ├─ module-npc/ # NPC 状态与对话模块 package
│ ├─ module-progression/ # 成长与章节推进模块 package
│ ├─ module-quest/ # 任务运行时模块 package
│ ├─ module-runtime-item/ # 运行时物品模块 package
│ ├─ module-custom-world/ # 自定义世界与 agent 模块 package
│ ├─ module-assets/ # 资产任务与对象绑定模块 package
│ ├─ module-ai/ # AI 编排模块 package
├─ crates/
│ ├─ api-server/ # Axum 主工程 crate负责装配路由、中间件、SSE 与模块引用
─ spacetime-module/ # SpacetimeDB 主工程 crate负责聚合表、reducer、view 并发布 wasm
│ ├─ module-auth/ # 鉴权与会话模块 crate
│ ├─ module-runtime/ # runtime snapshot / settings / profile 模块 crate
│ ├─ module-story/ # story 主循环模块 crate
│ ├─ module-combat/ # 战斗规则模块 crate
│ ├─ module-inventory/ # 背包与奖励模块 crate
│ ├─ module-npc/ # NPC 状态与对话模块 crate
│ ├─ module-progression/ # 成长与章节推进模块 crate
│ ├─ module-quest/ # 任务运行时模块 crate
│ ├─ module-runtime-item/ # 运行时物品模块 crate
│ ├─ module-custom-world/ # 自定义世界与 agent 模块 crate
│ ├─ module-assets/ # 资产任务与对象绑定模块 crate
│ ├─ module-ai/ # AI 编排模块 crate
│ ├─ shared-contracts/ # HTTP DTO / SSE event / 前后端兼容 contract
│ ├─ shared-kernel/ # 跨模块共享领域类型、ID、枚举、值对象
│ ├─ platform-auth/ # JWT、cookie、provider adapter
@@ -250,17 +256,17 @@ server-rs/
目录职责约束:
1. `apps/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包。
2. `apps/spacetime-module/` 只负责聚合各模块 package 的状态模型,不直接承接外部副作用。
3. `packages/module-*` 保持与当前业务模块边界一一对应,已明确退出本轮的 `editor` 遗留模块除外;必要时可在 package 内部再拆 `application``domain``spacetime` 子层次。
4. `packages/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议。
5. `packages/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架。
6. `packages/platform-*` 统一承接三方供应商与平台适配。
1. `crates/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包。
2. `crates/spacetime-module/` 只负责聚合各模块 crate 的状态模型,不直接承接外部副作用。
3. `crates/module-*` 保持与当前业务模块边界一一对应,已明确退出本轮的 `editor` 遗留模块除外;必要时可在 crate 内部再拆 `application``domain``spacetime` 子层次。
4. `crates/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议。
5. `crates/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架。
6. `crates/platform-*` 统一承接三方供应商与平台适配。
命名补充说明:
1. 本文后续若出现 `auth-service``oss-service``llm-service``application::...` 等历史逻辑名,统一视为职责标签,而不是强制要求继续存在同名顶层目录。
2. 在新的多 package 版本中,这些职责会落到 `packages/module-*` 内部子层次,或落到 `packages/platform-*``packages/shared-*` 等共享 package 中。
2. 在新的多 crate 版本中,这些职责会落到 `crates/module-*` 内部子层次,或落到 `crates/platform-*``crates/shared-*` 等共享 crate 中。
## 7. 目标模块映射