diff --git a/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md b/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md index af2c8924..e371ef98 100644 --- a/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md +++ b/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md @@ -45,17 +45,29 @@ 交付物:[../server-rs/README.md](../server-rs/README.md) - [x] 创建 workspace `Cargo.toml` 交付物:[../server-rs/Cargo.toml](../server-rs/Cargo.toml) -- [x] 创建 `crates/api-server` - 交付物:[../server-rs/crates/api-server/README.md](../server-rs/crates/api-server/README.md) -- [ ] 创建 `crates/spacetime-module` -- [ ] 创建 `crates/application` -- [ ] 创建 `crates/domain` -- [ ] 创建 `crates/contracts` -- [ ] 创建 `crates/auth-service` -- [ ] 创建 `crates/oss-service` -- [ ] 创建 `crates/llm-service` -- [ ] 创建 `crates/spacetime-client` -- [ ] 创建 `crates/tests` +- [x] 创建 `apps/api-server` + 交付物:[../server-rs/apps/api-server/README.md](../server-rs/apps/api-server/README.md) +- [ ] 创建 `apps/spacetime-module` +- [ ] 创建 `packages/module-auth` +- [ ] 创建 `packages/module-runtime` +- [ ] 创建 `packages/module-story` +- [ ] 创建 `packages/module-combat` +- [ ] 创建 `packages/module-inventory` +- [ ] 创建 `packages/module-npc` +- [ ] 创建 `packages/module-progression` +- [ ] 创建 `packages/module-quest` +- [ ] 创建 `packages/module-runtime-item` +- [ ] 创建 `packages/module-custom-world` +- [ ] 创建 `packages/module-assets` +- [ ] 创建 `packages/module-editor` +- [ ] 创建 `packages/module-ai` +- [ ] 创建 `packages/shared-contracts` +- [ ] 创建 `packages/shared-kernel` +- [ ] 创建 `packages/platform-auth` +- [ ] 创建 `packages/platform-oss` +- [ ] 创建 `packages/platform-llm` +- [ ] 创建 `packages/spacetime-client` +- [ ] 创建 `packages/tests-support` ### Axum 基础能力 diff --git a/backend-rewrite-tasklist/M0_MODULE_MIGRATION_BASELINE_2026-04-20.md b/backend-rewrite-tasklist/M0_MODULE_MIGRATION_BASELINE_2026-04-20.md index 92d895c0..03fe7e6f 100644 --- a/backend-rewrite-tasklist/M0_MODULE_MIGRATION_BASELINE_2026-04-20.md +++ b/backend-rewrite-tasklist/M0_MODULE_MIGRATION_BASELINE_2026-04-20.md @@ -16,11 +16,16 @@ 这里的“迁移归属”不是简单把旧目录名照搬到 Rust,而是要求后续重写必须先明确: -1. 每个旧模块在新架构中的主归属 crate。 +1. 每个旧模块在新架构中的主归属 package。 2. 每个旧模块是否需要拆成“SpacetimeDB 状态层 + Axum/application 编排层”。 3. 每个旧模块的状态真相应该进入 `SpacetimeDB`、`OSS` 还是开发态本地文件适配。 4. 每个旧模块优先落在哪个迁移阶段,避免后续任务拆分时反复改口径。 +命名补充说明: + +1. 本文中仍出现的 `application::...`、`auth-service`、`oss-service`、`llm-service` 等名称,统一表示逻辑职责,不再要求它们必须继续作为顶层独立 crate 存在。 +2. 在新的多 package 结构下,这些逻辑职责默认落到对应 `packages/module-*` 的内部子层次,或落到 `packages/platform-*`、`packages/shared-*` 等共享 package 中。 + 补充边界: 1. 本文只覆盖当前 `server-node/src/modules/*` 下的 `12` 个内部模块。 @@ -266,11 +271,11 @@ - 重写后主归属 - 重写后次归属 - 目标迁移阶段 -3. 后续拆 `server-rs/` crate、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。 +3. 后续拆 `server-rs/` 多 package、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。 ## 8. 后续直接依赖这份基线的任务 -1. 设计 `server-rs/` workspace 与 crate 边界 +1. 设计 `server-rs/` workspace 与 package 边界 2. 设计 SpacetimeDB `runtime / gameplay / custom_world / asset_metadata` 表分层 3. 设计 story action reducer 的跨模块协作边界 4. 设计 custom world / assets / editor 的 Axum facade diff --git a/backend-rewrite-tasklist/M0_PHASE_ACCEPTANCE_MATRIX_2026-04-20.md b/backend-rewrite-tasklist/M0_PHASE_ACCEPTANCE_MATRIX_2026-04-20.md index 0df06430..10a08a81 100644 --- a/backend-rewrite-tasklist/M0_PHASE_ACCEPTANCE_MATRIX_2026-04-20.md +++ b/backend-rewrite-tasklist/M0_PHASE_ACCEPTANCE_MATRIX_2026-04-20.md @@ -38,7 +38,7 @@ | 阶段 | 入口条件 | 核心交付 | 退出条件 | 回归焦点 | | --- | --- | --- | --- | --- | | `M0` 冻结能力与边界 | 已完成当前 Node 后端摸底;已明确目标架构为 `SpacetimeDB + Axum + 阿里云 OSS` | 冻结能力基线、路由矩阵、模块归属、SSE、静态资源前缀、前端响应契约、仓库边界决议、阶段验收矩阵 | `6` 个挂载面、`96` 条路由、`12` 个模块、`6` 条 SSE、`6` 个静态资源前缀全部形成书面基线;`server-rs/`、`server-node/`、Axum 边界、副作用收口原则全部冻结 | 文档口径一致性;前端 contract 依赖项是否被遗漏;迁移阶段是否还存在多套边界说法 | -| `M1` Rust 工作区与 Axum 基础设施 | `M0` 全部退出条件满足 | `server-rs/` workspace、基础 crate、统一配置、日志、request id、中间件、response envelope、`/healthz`、开发脚本 | Axum 可独立启动;`/healthz` 与当前工程兼容;`x-request-id`、`x-api-version`、`x-route-version`、`x-response-time-ms` 行为稳定;workspace 完整编译通过 | 基础头部兼容;健康检查兼容;目录结构与 crate 归属是否偏离 `M0` 决议 | +| `M1` Rust 工作区与 Axum 基础设施 | `M0` 全部退出条件满足 | `server-rs/` workspace、`apps/api-server`、`apps/spacetime-module`、独立模块 packages、统一配置、日志、request id、中间件、response envelope、`/healthz`、开发脚本 | Axum 可独立启动;`/healthz` 与当前工程兼容;`x-request-id`、`x-api-version`、`x-route-version`、`x-response-time-ms` 行为稳定;workspace 完整编译通过;主工程与模块 package 引用边界稳定 | 基础头部兼容;健康检查兼容;目录结构与 package 归属是否偏离 `M0` 决议 | | `M2` 鉴权、会话、JWT 与 refresh cookie | `M1` 已可稳定启动;Axum 中间件与配置链可用 | 身份表、会话表、JWT claims、refresh cookie、密码登录、手机验证码登录、微信登录、OIDC 透传、旧鉴权接口兼容 | 密码登录、refresh cookie、手机验证码、微信登录主链可用;旧鉴权接口 contract 回归通过;SpacetimeDB 可识别 Axum 签发身份 | Cookie 与 JWT 兼容;`CAPTCHA_REQUIRED` 与 `details.captchaChallenge` 是否保持;登录态吊销与刷新是否稳定 | | `M3` runtime snapshot / settings / profile | `M2` 鉴权稳定;用户身份可透传到 SpacetimeDB | `runtime_snapshot`、`runtime_setting`、profile 相关主表与 facade;存档、设置、浏览历史、save archive 兼容接口 | 登录用户可正常保存、读取、删除存档;profile dashboard / browse history / save archive 行为一致;前端恢复流程可直接跑通 | 快照恢复准确性;兼容路径与主路径是否返回一致;历史记录排序与去重逻辑 | | `M4` story action 与 gameplay reducer | `M3` 快照与用户状态主链稳定 | story / combat / inventory / npc / quest / progression / runtime-item 表与 reducer;story 兼容接口与 view model | 前端 story 主循环可用;`story state` 恢复链可用;NPC / quest / treasure / combat 主循环行为不回退;旧 Node story route 回归平移完成 | `RuntimeStoryActionResponse` 结构;战斗与奖励联动;状态投影是否与旧前端恢复逻辑一致 | @@ -70,6 +70,7 @@ - 迁移期保留 `server-node/` - 前端 `M0 ~ M6` 期间只访问 Axum - 外部副作用统一收口在 Axum + - `server-rs/` 内部采用 `apps/* + packages/*` 多 package 组织 4. `M1` 以后任何任务引用路由、模块、SSE、静态资源与响应契约时,都必须能追溯到本阶段产出的冻结文档。 ## 5. 跨阶段回归维度 diff --git a/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md b/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md index 39d98caf..06b59817 100644 --- a/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md +++ b/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md @@ -22,6 +22,7 @@ | 旧 `server-node/` 在迁移期继续保留,不提前删除 | 已确认 | `server-node/` 在 `M0 ~ M6` 期间持续保留,直到 `M7` 切流与回退验证完成后再评估清理。 | | 前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB | 已确认 | `M0 ~ M6` 前端统一只访问 Axum 暴露的 `/api/*`、`/healthz`、SSE 与静态资源兼容层,不新增直连 SpacetimeDB 原生协议路径。 | | 外部副作用统一收口在 Axum,不放进 SpacetimeDB 模块 | 已确认 | OSS、LLM、短信、微信 OAuth、本地文件系统等外部副作用统一落在 Axum/application/infra,不进入 SpacetimeDB reducer/module。 | +| `server-rs/` 内部采用多 package 组织,由主工程统一引用模块包 | 已确认 | `server-rs/` 采用 `apps/* + packages/*` 工作区结构,`apps/api-server` 与 `apps/spacetime-module` 作为主工程,独立模块以 `packages/module-*` 形式被主工程引用。 | ## 3. 已确认决议一:`server-rs/` 固定落在仓库根目录 @@ -59,19 +60,20 @@ Genarrative/ ### 3.3 这样落位的原因 -1. 与当前重写设计文档、任务清单、后续 `M1` crate 规划保持一致。 +1. 与当前重写设计文档、任务清单、后续 `M1` 多 package 规划保持一致。 2. 允许 `server-node/` 与 `server-rs/` 在迁移期并行存在,便于逐阶段切流。 3. 让 Rust 工作区边界清晰,不污染现有前端 `src/`、`packages/`、Vite 工具链。 -4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`crates/*` 时路径最直接,不需要额外中间层。 +4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`apps/*`、`packages/*` 时路径最直接,不需要额外中间层。 ### 3.4 对后续任务的直接约束 从这一条决议开始,后续任务必须统一按以下路径落位: 1. `M1` 的工作区初始化在 `server-rs/` -2. Axum 入口在 `server-rs/crates/api-server` -3. SpacetimeDB 模块在 `server-rs/crates/spacetime-module` -4. 相关脚本在 `server-rs/scripts/` +2. Axum 主工程在 `server-rs/apps/api-server` +3. SpacetimeDB 主工程在 `server-rs/apps/spacetime-module` +4. 独立模块包在 `server-rs/packages/module-*` +5. 相关脚本在 `server-rs/scripts/` ## 4. 本条任务完成定义 @@ -194,6 +196,61 @@ Genarrative/ 从这一条决议开始,后续任务必须遵守: -1. `M1` crate 设计时,`oss-service`、`llm-service`、`auth-service` 固定属于 Axum/application 侧。 +1. `M1` package 设计时,`platform-oss`、`platform-llm`、`platform-auth` 固定属于 Axum / 模块应用层一侧。 2. `M2 ~ M6` 设计 reducer 时,只写状态变更,不直接发外部请求。 3. 若确实需要异步副作用,也必须由 Axum worker 或应用层作业执行,再把结果回写 SpacetimeDB。 + +## 8. 已确认决议五:`server-rs/` 内部采用多 package 组织 + +### 8.1 决议内容 + +从当前版本开始,`server-rs/` 内部结构固定采用: + +1. `apps/*`:主工程 package +2. `packages/*`:独立模块 package +3. `scripts/*`:开发、发布、回归脚本 + +主工程固定包含: + +1. `apps/api-server` +2. `apps/spacetime-module` + +独立模块 package 固定按“每个独立模块一个 package”推进,至少覆盖: + +1. `packages/module-auth` +2. `packages/module-runtime` +3. `packages/module-story` +4. `packages/module-combat` +5. `packages/module-inventory` +6. `packages/module-npc` +7. `packages/module-progression` +8. `packages/module-quest` +9. `packages/module-runtime-item` +10. `packages/module-custom-world` +11. `packages/module-assets` +12. `packages/module-editor` +13. `packages/module-ai` + +跨模块共享 package 固定包含: + +1. `packages/shared-contracts` +2. `packages/shared-kernel` +3. `packages/platform-auth` +4. `packages/platform-oss` +5. `packages/platform-llm` +6. `packages/spacetime-client` +7. `packages/tests-support` + +### 8.2 这样决议的原因 + +1. 用户已经明确要求后端采用多 package 模式,独立模块不能继续堆回单个技术层大包。 +2. 当前后端已有 `12` 个内部模块边界,多 package 方案更容易保持一一映射与独立演进。 +3. `apps/api-server` 与 `apps/spacetime-module` 只做组合与发布,更符合“主工程引用模块包”的组织方式。 + +### 8.3 对后续任务的直接约束 + +从这一条决议开始,后续任务必须遵守: + +1. `M1` 后续目录创建任务统一按 `apps/* + packages/*` 执行,不再新增 `crates/*` 目录规划。 +2. 每个业务模块默认先有自己的 workspace package,再由主工程引用。 +3. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 package,而不是业务模块混装。 diff --git a/backend-rewrite-tasklist/README.md b/backend-rewrite-tasklist/README.md index f353130c..00ebe72c 100644 --- a/backend-rewrite-tasklist/README.md +++ b/backend-rewrite-tasklist/README.md @@ -16,7 +16,7 @@ - [07_CROSS_CUTTING_AND_ACCEPTANCE.md](./07_CROSS_CUTTING_AND_ACCEPTANCE.md):横向专项、执行顺序与最终验收清单。 - [M0_CAPABILITY_SURFACE_BASELINE_2026-04-20.md](./M0_CAPABILITY_SURFACE_BASELINE_2026-04-20.md):当前 Node 后端 `6` 个挂载面的冻结基线,用于后续接口映射、模块迁移与验收对照。 - [M0_ROUTE_MIGRATION_MATRIX_2026-04-20.md](./M0_ROUTE_MIGRATION_MATRIX_2026-04-20.md):当前 `96` 条后端路由的“旧接口 -> 新实现”迁移矩阵,用于 Axum 路由树和 application service 落位。 -- [M0_MODULE_MIGRATION_BASELINE_2026-04-20.md](./M0_MODULE_MIGRATION_BASELINE_2026-04-20.md):当前 `12` 个内部模块的迁移归属基线,用于锁定 Rust crate、SpacetimeDB bounded context 与 Axum/application 分工。 +- [M0_MODULE_MIGRATION_BASELINE_2026-04-20.md](./M0_MODULE_MIGRATION_BASELINE_2026-04-20.md):当前 `12` 个内部模块的迁移归属基线,用于锁定 Rust package、SpacetimeDB bounded context 与 Axum/application 分工。 - [M0_SSE_INTERFACE_BASELINE_2026-04-20.md](./M0_SSE_INTERFACE_BASELINE_2026-04-20.md):当前 `6` 条 SSE 接口及其事件格式冻结基线,用于 Axum SSE 兼容和前端 contract 回归。 - [M0_GENERATED_STATIC_PREFIX_BASELINE_2026-04-20.md](./M0_GENERATED_STATIC_PREFIX_BASELINE_2026-04-20.md):当前正式 `/generated-*` 静态资源前缀冻结基线,用于 Axum 静态资源兼容层与 OSS 对象键规划。 - [M0_FRONTEND_RESPONSE_CONTRACT_BASELINE_2026-04-20.md](./M0_FRONTEND_RESPONSE_CONTRACT_BASELINE_2026-04-20.md):当前前端直接依赖的响应头、envelope 与错误格式冻结基线,用于 Axum 中间件与错误响应兼容。 diff --git a/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md b/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md index 5e0ef994..09babe4e 100644 --- a/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md +++ b/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md @@ -191,6 +191,17 @@ SpacetimeDB 官方文档对自动迁移的限制很强: 2. 高频变化数据优先事件表化 3. 聚合结果优先投影表 / view,而不是频繁重塑旧表结构 +### 5.5 主工程必须按多 package 方式组织模块 + +从当前版本开始,Rust 后端固定采用“主工程 + 独立模块 package”的方式组织: + +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”中,确保后续重写能继续按模块独立演进。 + ## 6. 推荐工程结构 本次重写固定在仓库根目录新增 Rust 工作区 `server-rs/`,并与 `server-node/` 同级: @@ -198,17 +209,30 @@ SpacetimeDB 官方文档对自动迁移的限制很强: ```text server-rs/ ├─ Cargo.toml -├─ crates/ -│ ├─ api-server/ # Axum 入口 -│ ├─ spacetime-module/ # SpacetimeDB Rust 模块(编译为 wasm) -│ ├─ application/ # 用例编排层 -│ ├─ domain/ # 纯领域类型、枚举、ID、值对象 -│ ├─ contracts/ # HTTP DTO / SSE event / 内部 command DTO -│ ├─ auth-service/ # JWT、cookie、provider adapter -│ ├─ oss-service/ # OSS 直传、签名、对象管理 -│ ├─ llm-service/ # DashScope / Ark / 其他模型适配 +├─ 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-editor/ # 编辑器读写模块 package +│ ├─ module-ai/ # AI 编排模块 package +│ ├─ shared-contracts/ # HTTP DTO / SSE event / 前后端兼容 contract +│ ├─ shared-kernel/ # 跨模块共享领域类型、ID、枚举、值对象 +│ ├─ platform-auth/ # JWT、cookie、provider adapter +│ ├─ platform-oss/ # OSS 直传、签名、对象管理 +│ ├─ platform-llm/ # DashScope / Ark / 其他模型适配 │ ├─ spacetime-client/ # 生成 bindings 后的 DB client adapter -│ └─ tests/ # 集成测试、contract 测试、smoke +│ └─ tests-support/ # 集成测试、contract 测试、smoke 支撑 └─ scripts/ ├─ dev.sh / dev.ps1 ├─ spacetime-publish.sh @@ -217,11 +241,17 @@ server-rs/ 目录职责约束: -1. `spacetime-module/` 只能写纯状态逻辑,不写网络 / 文件系统。 -2. `api-server/` 只做协议装配、鉴权、中间件、handler。 -3. `application/` 编排 Axum、OSS、LLM、SpacetimeDB 之间的流程。 -4. `domain/` 只放纯数据结构和规则,不碰框架。 -5. `contracts/` 负责与当前前端兼容的 JSON / SSE 协议。 +1. `apps/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包。 +2. `apps/spacetime-module/` 只负责聚合各模块 package 的状态模型,不直接承接外部副作用。 +3. `packages/module-*` 保持与当前业务模块边界一一对应,必要时可在 package 内部再拆 `application`、`domain`、`spacetime` 子层次。 +4. `packages/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议。 +5. `packages/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架。 +6. `packages/platform-*` 统一承接三方供应商与平台适配。 + +命名补充说明: + +1. 本文后续若出现 `auth-service`、`oss-service`、`llm-service`、`application::...` 等历史逻辑名,统一视为职责标签,而不是强制要求继续存在同名顶层目录。 +2. 在新的多 package 版本中,这些职责会落到 `packages/module-*` 内部子层次,或落到 `packages/platform-*`、`packages/shared-*` 等共享 package 中。 ## 7. 目标模块映射 diff --git a/server-rs/Cargo.toml b/server-rs/Cargo.toml index ea6f47e7..6f3361c1 100644 --- a/server-rs/Cargo.toml +++ b/server-rs/Cargo.toml @@ -1,5 +1,5 @@ # 当前阶段先建立虚拟 workspace。 -# 各 crate 创建完成后,再按任务清单逐项补充 members。 +# 后续按“主工程 apps + 独立模块 packages”模式逐项补充 members。 [workspace] resolver = "2" diff --git a/server-rs/README.md b/server-rs/README.md index b141e1aa..6db2462f 100644 --- a/server-rs/README.md +++ b/server-rs/README.md @@ -14,24 +14,37 @@ ## 2. 当前阶段说明 -当前目录已经完成以下两项初始化: +当前目录已经完成以下四项初始化: 1. 为新后端预留正式目录并把路径固定到仓库结构中。 -2. 创建虚拟 workspace `Cargo.toml`,后续 crate 会逐项挂入。 -3. 创建 `crates/api-server/` 目录占位,固定 Axum 入口 crate 落位。 +2. 创建虚拟 workspace `Cargo.toml`,后续 package 会逐项挂入。 +3. 明确内部采用“`apps/*` 主工程 + `packages/*` 独立模块包”的多 package 组织方式。 +4. 创建 `apps/api-server/` 目录占位,固定 Axum 主工程落位。 后续任务会继续在本目录内按顺序补齐: -1. `crates/spacetime-module` -2. `crates/application` -3. `crates/domain` -4. `crates/contracts` -5. `crates/auth-service` -6. `crates/oss-service` -7. `crates/llm-service` -8. `crates/spacetime-client` -9. `crates/tests` -10. `scripts/*` +1. `apps/spacetime-module` +2. `packages/module-auth` +3. `packages/module-runtime` +4. `packages/module-story` +5. `packages/module-combat` +6. `packages/module-inventory` +7. `packages/module-npc` +8. `packages/module-progression` +9. `packages/module-quest` +10. `packages/module-runtime-item` +11. `packages/module-custom-world` +12. `packages/module-assets` +13. `packages/module-editor` +14. `packages/module-ai` +15. `packages/shared-contracts` +16. `packages/shared-kernel` +17. `packages/platform-auth` +18. `packages/platform-oss` +19. `packages/platform-llm` +20. `packages/spacetime-client` +21. `packages/tests-support` +22. `scripts/*` ## 3. 已冻结边界 @@ -39,8 +52,9 @@ 1. 迁移期保留 `server-node/`,不提前删除。 2. 前端在 `M0 ~ M6` 期间只访问 Axum,不直连 SpacetimeDB。 -3. 外部副作用统一收口在 Axum / application / infra。 -4. `spacetime-module` 只负责状态、规则、reducer、view 与读模型。 +3. 外部副作用统一收口在 Axum / package 内应用层 / infra。 +4. `apps/api-server` 只组合与暴露协议,不直接吞并业务模块实现。 +5. `apps/spacetime-module` 只负责汇总各模块 package 的表、reducer、view。 ## 4. 关联文档 diff --git a/server-rs/crates/api-server/README.md b/server-rs/apps/api-server/README.md similarity index 62% rename from server-rs/crates/api-server/README.md rename to server-rs/apps/api-server/README.md index 85c45341..ef369ce5 100644 --- a/server-rs/crates/api-server/README.md +++ b/server-rs/apps/api-server/README.md @@ -1,10 +1,10 @@ -# api-server crate 占位说明 +# api-server 主工程 package 占位说明 日期:`2026-04-20` -## 1. crate 职责 +## 1. package 职责 -`api-server` 是新后端的 Axum 入口 crate,后续负责: +`api-server` 是新后端的 Axum 主工程 package,后续负责: 1. `main.rs` 启动入口 2. `Router` 装配 @@ -16,7 +16,7 @@ 当前提交仅完成目录占位,不提前进入具体实现。 -后续与本 crate 直接相关的任务包括: +后续与本 package 直接相关的任务包括: 1. 搭建 `main.rs` / `Router` / `with_state` 2. 接入统一配置加载 @@ -29,6 +29,6 @@ ## 3. 边界约束 1. `api-server` 负责 HTTP、SSE、Cookie、Header、路由与协议装配。 -2. 业务编排下沉到 `application` crate。 -3. 外部副作用通过 `auth-service`、`oss-service`、`llm-service` 与后续基础设施适配层完成。 +2. 业务逻辑优先通过独立模块 package 暴露能力,再由主工程组合。 +3. 外部副作用通过 `platform-auth`、`platform-oss`、`platform-llm` 与各模块 package 的应用层完成。 4. 不把领域规则直接堆在 handler 中。