From f6bf5f665e2a137b5fecbba72cecf3fd5868cfe0 Mon Sep 17 00:00:00 2001 From: kdletters Date: Tue, 21 Apr 2026 11:01:25 +0800 Subject: [PATCH] refactor: move server rs workspace entries into crates --- .../01_M0_M2_FOUNDATION_AND_AUTH.md | 106 +++++++++--------- ...M0_MODULE_MIGRATION_BASELINE_2026-04-20.md | 10 +- .../M0_PHASE_ACCEPTANCE_MATRIX_2026-04-20.md | 4 +- ...EPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md | 89 ++++++++------- backend-rewrite-tasklist/README.md | 2 +- ...M_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md | 68 ++++++----- server-rs/Cargo.toml | 6 +- server-rs/README.md | 54 ++++----- .../{apps => crates}/api-server/Cargo.toml | 0 .../{apps => crates}/api-server/README.md | 18 +-- .../api-server/src/api_response.rs | 0 .../{apps => crates}/api-server/src/app.rs | 0 .../{apps => crates}/api-server/src/config.rs | 0 .../api-server/src/error_middleware.rs | 0 .../{apps => crates}/api-server/src/health.rs | 0 .../api-server/src/http_error.rs | 0 .../api-server/src/logging.rs | 0 .../{apps => crates}/api-server/src/main.rs | 0 .../api-server/src/request_context.rs | 0 .../api-server/src/response_headers.rs | 0 .../{apps => crates}/api-server/src/state.rs | 0 .../{packages => crates}/module-ai/README.md | 0 .../module-assets/README.md | 0 .../module-auth/README.md | 16 +-- .../module-combat/README.md | 0 .../module-custom-world/README.md | 0 .../module-inventory/README.md | 0 .../{packages => crates}/module-npc/README.md | 0 .../module-progression/README.md | 0 .../module-quest/README.md | 0 .../module-runtime-item/README.md | 0 .../module-runtime/README.md | 0 .../module-story/README.md | 0 .../platform-auth/README.md | 0 .../platform-llm/README.md | 0 .../platform-oss/README.md | 0 .../shared-contracts/README.md | 0 .../shared-kernel/README.md | 0 .../spacetime-client/README.md | 0 .../spacetime-module/README.md | 18 +-- .../tests-support/README.md | 0 server-rs/scripts/check.ps1 | 23 ++-- server-rs/scripts/check.sh | 24 ++-- server-rs/scripts/spacetime-dev.ps1 | 6 +- server-rs/scripts/spacetime-dev.sh | 8 +- server-rs/scripts/test.ps1 | 13 ++- server-rs/scripts/test.sh | 12 +- 47 files changed, 244 insertions(+), 233 deletions(-) rename server-rs/{apps => crates}/api-server/Cargo.toml (100%) rename server-rs/{apps => crates}/api-server/README.md (87%) rename server-rs/{apps => crates}/api-server/src/api_response.rs (100%) rename server-rs/{apps => crates}/api-server/src/app.rs (100%) rename server-rs/{apps => crates}/api-server/src/config.rs (100%) rename server-rs/{apps => crates}/api-server/src/error_middleware.rs (100%) rename server-rs/{apps => crates}/api-server/src/health.rs (100%) rename server-rs/{apps => crates}/api-server/src/http_error.rs (100%) rename server-rs/{apps => crates}/api-server/src/logging.rs (100%) rename server-rs/{apps => crates}/api-server/src/main.rs (100%) rename server-rs/{apps => crates}/api-server/src/request_context.rs (100%) rename server-rs/{apps => crates}/api-server/src/response_headers.rs (100%) rename server-rs/{apps => crates}/api-server/src/state.rs (100%) rename server-rs/{packages => crates}/module-ai/README.md (100%) rename server-rs/{packages => crates}/module-assets/README.md (100%) rename server-rs/{packages => crates}/module-auth/README.md (76%) rename server-rs/{packages => crates}/module-combat/README.md (100%) rename server-rs/{packages => crates}/module-custom-world/README.md (100%) rename server-rs/{packages => crates}/module-inventory/README.md (100%) rename server-rs/{packages => crates}/module-npc/README.md (100%) rename server-rs/{packages => crates}/module-progression/README.md (100%) rename server-rs/{packages => crates}/module-quest/README.md (100%) rename server-rs/{packages => crates}/module-runtime-item/README.md (100%) rename server-rs/{packages => crates}/module-runtime/README.md (100%) rename server-rs/{packages => crates}/module-story/README.md (100%) rename server-rs/{packages => crates}/platform-auth/README.md (100%) rename server-rs/{packages => crates}/platform-llm/README.md (100%) rename server-rs/{packages => crates}/platform-oss/README.md (100%) rename server-rs/{packages => crates}/shared-contracts/README.md (100%) rename server-rs/{packages => crates}/shared-kernel/README.md (100%) rename server-rs/{packages => crates}/spacetime-client/README.md (100%) rename server-rs/{apps => crates}/spacetime-module/README.md (66%) rename server-rs/{packages => crates}/tests-support/README.md (100%) 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 6eacd735..0f747a4e 100644 --- a/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md +++ b/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md @@ -45,73 +45,73 @@ 交付物:[../server-rs/README.md](../server-rs/README.md) - [x] 创建 workspace `Cargo.toml` 交付物:[../server-rs/Cargo.toml](../server-rs/Cargo.toml) -- [x] 创建 `apps/api-server` - 交付物:[../server-rs/apps/api-server/README.md](../server-rs/apps/api-server/README.md) -- [x] 创建 `apps/spacetime-module` - 交付物:[../server-rs/apps/spacetime-module/README.md](../server-rs/apps/spacetime-module/README.md) -- [x] 创建 `packages/module-auth` - 交付物:[../server-rs/packages/module-auth/README.md](../server-rs/packages/module-auth/README.md) -- [x] 创建 `packages/module-runtime` - 交付物:[../server-rs/packages/module-runtime/README.md](../server-rs/packages/module-runtime/README.md) -- [x] 创建 `packages/module-story` - 交付物:[../server-rs/packages/module-story/README.md](../server-rs/packages/module-story/README.md) -- [x] 创建 `packages/module-combat` - 交付物:[../server-rs/packages/module-combat/README.md](../server-rs/packages/module-combat/README.md) -- [x] 创建 `packages/module-inventory` - 交付物:[../server-rs/packages/module-inventory/README.md](../server-rs/packages/module-inventory/README.md) -- [x] 创建 `packages/module-npc` - 交付物:[../server-rs/packages/module-npc/README.md](../server-rs/packages/module-npc/README.md) -- [x] 创建 `packages/module-progression` - 交付物:[../server-rs/packages/module-progression/README.md](../server-rs/packages/module-progression/README.md) -- [x] 创建 `packages/module-quest` - 交付物:[../server-rs/packages/module-quest/README.md](../server-rs/packages/module-quest/README.md) -- [x] 创建 `packages/module-runtime-item` - 交付物:[../server-rs/packages/module-runtime-item/README.md](../server-rs/packages/module-runtime-item/README.md) -- [x] 创建 `packages/module-custom-world` - 交付物:[../server-rs/packages/module-custom-world/README.md](../server-rs/packages/module-custom-world/README.md) -- [x] 创建 `packages/module-assets` - 交付物:[../server-rs/packages/module-assets/README.md](../server-rs/packages/module-assets/README.md) -- [x] 创建 `packages/module-ai` - 交付物:[../server-rs/packages/module-ai/README.md](../server-rs/packages/module-ai/README.md) -- [x] 创建 `packages/shared-contracts` - 交付物:[../server-rs/packages/shared-contracts/README.md](../server-rs/packages/shared-contracts/README.md) -- [x] 创建 `packages/shared-kernel` - 交付物:[../server-rs/packages/shared-kernel/README.md](../server-rs/packages/shared-kernel/README.md) -- [x] 创建 `packages/platform-auth` - 交付物:[../server-rs/packages/platform-auth/README.md](../server-rs/packages/platform-auth/README.md) -- [x] 创建 `packages/platform-oss` - 交付物:[../server-rs/packages/platform-oss/README.md](../server-rs/packages/platform-oss/README.md) -- [x] 创建 `packages/platform-llm` - 交付物:[../server-rs/packages/platform-llm/README.md](../server-rs/packages/platform-llm/README.md) -- [x] 创建 `packages/spacetime-client` - 交付物:[../server-rs/packages/spacetime-client/README.md](../server-rs/packages/spacetime-client/README.md) -- [x] 创建 `packages/tests-support` - 交付物:[../server-rs/packages/tests-support/README.md](../server-rs/packages/tests-support/README.md) +- [x] 创建 `crates/api-server` + 交付物:[../server-rs/crates/api-server/README.md](../server-rs/crates/api-server/README.md) +- [x] 创建 `crates/spacetime-module` + 交付物:[../server-rs/crates/spacetime-module/README.md](../server-rs/crates/spacetime-module/README.md) +- [x] 创建 `crates/module-auth` + 交付物:[../server-rs/crates/module-auth/README.md](../server-rs/crates/module-auth/README.md) +- [x] 创建 `crates/module-runtime` + 交付物:[../server-rs/crates/module-runtime/README.md](../server-rs/crates/module-runtime/README.md) +- [x] 创建 `crates/module-story` + 交付物:[../server-rs/crates/module-story/README.md](../server-rs/crates/module-story/README.md) +- [x] 创建 `crates/module-combat` + 交付物:[../server-rs/crates/module-combat/README.md](../server-rs/crates/module-combat/README.md) +- [x] 创建 `crates/module-inventory` + 交付物:[../server-rs/crates/module-inventory/README.md](../server-rs/crates/module-inventory/README.md) +- [x] 创建 `crates/module-npc` + 交付物:[../server-rs/crates/module-npc/README.md](../server-rs/crates/module-npc/README.md) +- [x] 创建 `crates/module-progression` + 交付物:[../server-rs/crates/module-progression/README.md](../server-rs/crates/module-progression/README.md) +- [x] 创建 `crates/module-quest` + 交付物:[../server-rs/crates/module-quest/README.md](../server-rs/crates/module-quest/README.md) +- [x] 创建 `crates/module-runtime-item` + 交付物:[../server-rs/crates/module-runtime-item/README.md](../server-rs/crates/module-runtime-item/README.md) +- [x] 创建 `crates/module-custom-world` + 交付物:[../server-rs/crates/module-custom-world/README.md](../server-rs/crates/module-custom-world/README.md) +- [x] 创建 `crates/module-assets` + 交付物:[../server-rs/crates/module-assets/README.md](../server-rs/crates/module-assets/README.md) +- [x] 创建 `crates/module-ai` + 交付物:[../server-rs/crates/module-ai/README.md](../server-rs/crates/module-ai/README.md) +- [x] 创建 `crates/shared-contracts` + 交付物:[../server-rs/crates/shared-contracts/README.md](../server-rs/crates/shared-contracts/README.md) +- [x] 创建 `crates/shared-kernel` + 交付物:[../server-rs/crates/shared-kernel/README.md](../server-rs/crates/shared-kernel/README.md) +- [x] 创建 `crates/platform-auth` + 交付物:[../server-rs/crates/platform-auth/README.md](../server-rs/crates/platform-auth/README.md) +- [x] 创建 `crates/platform-oss` + 交付物:[../server-rs/crates/platform-oss/README.md](../server-rs/crates/platform-oss/README.md) +- [x] 创建 `crates/platform-llm` + 交付物:[../server-rs/crates/platform-llm/README.md](../server-rs/crates/platform-llm/README.md) +- [x] 创建 `crates/spacetime-client` + 交付物:[../server-rs/crates/spacetime-client/README.md](../server-rs/crates/spacetime-client/README.md) +- [x] 创建 `crates/tests-support` + 交付物:[../server-rs/crates/tests-support/README.md](../server-rs/crates/tests-support/README.md) ### Axum 基础能力 - [x] 搭建 `main.rs` / `Router` / `with_state` - 交付物:[../server-rs/apps/api-server/src/main.rs](../server-rs/apps/api-server/src/main.rs) + 交付物:[../server-rs/crates/api-server/src/main.rs](../server-rs/crates/api-server/src/main.rs) - [x] 接入统一配置加载 - 交付物:[../server-rs/apps/api-server/src/config.rs](../server-rs/apps/api-server/src/config.rs) + 交付物:[../server-rs/crates/api-server/src/config.rs](../server-rs/crates/api-server/src/config.rs) - [x] 接入统一日志与 tracing - 交付物:[../server-rs/apps/api-server/src/logging.rs](../server-rs/apps/api-server/src/logging.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)、[../server-rs/apps/api-server/src/main.rs](../server-rs/apps/api-server/src/main.rs) + 交付物:[../server-rs/crates/api-server/src/logging.rs](../server-rs/crates/api-server/src/logging.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)、[../server-rs/crates/api-server/src/main.rs](../server-rs/crates/api-server/src/main.rs) - [x] 接入 `request_id` 中间件 - 交付物:[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs) + 交付物:[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs) - [x] 接入统一错误处理中间件 - 交付物:[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs)、[../server-rs/apps/api-server/src/error_middleware.rs](../server-rs/apps/api-server/src/error_middleware.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs) + 交付物:[../server-rs/crates/api-server/src/http_error.rs](../server-rs/crates/api-server/src/http_error.rs)、[../server-rs/crates/api-server/src/error_middleware.rs](../server-rs/crates/api-server/src/error_middleware.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs) - [x] 接入当前项目兼容的 response envelope - 交付物:[../server-rs/apps/api-server/src/api_response.rs](../server-rs/apps/api-server/src/api_response.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs) + 交付物:[../server-rs/crates/api-server/src/api_response.rs](../server-rs/crates/api-server/src/api_response.rs)、[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs)、[../server-rs/crates/api-server/src/http_error.rs](../server-rs/crates/api-server/src/http_error.rs) - [x] 接入 `x-request-id` - 交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs) + 交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs) - [x] 接入 `x-api-version` - 交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs) + 交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs) - [x] 接入 `x-route-version` - 交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs) + 交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs) - [x] 接入 `x-response-time-ms` - 交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs) + 交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)、[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs) - [x] 实现 `/healthz` - 交付物:[../server-rs/apps/api-server/src/health.rs](../server-rs/apps/api-server/src/health.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs) + 交付物:[../server-rs/crates/api-server/src/health.rs](../server-rs/crates/api-server/src/health.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs) ### 基础工程脚本 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 856cc73b..7af9e7f9 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,7 +16,7 @@ 这里的“迁移归属”不是简单把旧目录名照搬到 Rust,而是要求后续重写必须先明确: -1. 每个旧模块在新架构中的主归属 package。 +1. 每个旧模块在新架构中的主归属 crate。 2. 每个旧模块是否需要拆成“SpacetimeDB 状态层 + Axum/application 编排层”。 3. 每个旧模块的状态真相应该进入 `SpacetimeDB`、`OSS` 还是开发态本地文件适配。 4. 每个旧模块优先落在哪个迁移阶段,避免后续任务拆分时反复改口径。 @@ -24,7 +24,7 @@ 命名补充说明: 1. 本文中仍出现的 `application::...`、`auth-service`、`oss-service`、`llm-service` 等名称,统一表示逻辑职责,不再要求它们必须继续作为顶层独立 crate 存在。 -2. 在新的多 package 结构下,这些逻辑职责默认落到对应 `packages/module-*` 的内部子层次,或落到 `packages/platform-*`、`packages/shared-*` 等共享 package 中。 +2. 在新的多 crate 结构下,这些逻辑职责默认落到对应 `crates/module-*` 的内部子层次,或落到 `crates/platform-*`、`crates/shared-*` 等共享 crate 中。 补充边界: @@ -162,7 +162,7 @@ 重写后的冻结要求: 1. 该模块在 `server-node/` 中的存在事实继续保留,用于历史基线与后续清理对照。 -2. 自 `2026-04-21` 起,不再为 `server-rs/` 创建 `module-editor` package,也不再把它纳入 `M1 ~ M6` 主线迁移。 +2. 自 `2026-04-21` 起,不再为 `server-rs/` 创建 `module-editor` crate,也不再把它纳入 `M1 ~ M6` 主线迁移。 3. 若未来仍需清理或替代 editor,必须在遗留链路依赖确认后单独立项,不能夹带进当前 Rust 重写主链。 4. 不允许为了简化本轮任务而篡改其历史存在事实。 @@ -281,11 +281,11 @@ - 重写后次归属 - 目标迁移阶段 3. 本轮 active rewrite modules 为 `11` 个,且 `editor` 的遗留/不迁移口径已经冻结。 -4. 后续拆 `server-rs/` 多 package、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。 +4. 后续拆 `server-rs/` 多 crate、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。 ## 8. 后续直接依赖这份基线的任务 -1. 设计 `server-rs/` workspace 与 package 边界 +1. 设计 `server-rs/` workspace 与 crate 边界 2. 设计 SpacetimeDB `runtime / gameplay / custom_world / asset_metadata` 表分层 3. 设计 story action reducer 的跨模块协作边界 4. 设计 custom world / assets 的 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 4ee5623b..58fb3605 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 @@ -39,7 +39,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、`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` 决议 | +| `M1` Rust 工作区与 Axum 基础设施 | `M0` 全部退出条件满足 | `server-rs/` workspace、`crates/api-server`、`crates/spacetime-module`、独立模块 crates、统一配置、日志、request id、中间件、response envelope、`/healthz`、开发脚本 | Axum 可独立启动;`/healthz` 与当前工程兼容;`x-request-id`、`x-api-version`、`x-route-version`、`x-response-time-ms` 行为稳定;workspace 完整编译通过;主工程与模块 crate 引用边界稳定 | 基础头部兼容;健康检查兼容;目录结构与 crate 归属是否偏离 `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` 结构;战斗与奖励联动;状态投影是否与旧前端恢复逻辑一致 | @@ -71,7 +71,7 @@ - 迁移期保留 `server-node/` - 前端 `M0 ~ M6` 期间只访问 Axum - 外部副作用统一收口在 Axum - - `server-rs/` 内部采用 `apps/* + packages/*` 多 package 组织 + - `server-rs/` 内部采用 `crates/*` 多 crate 组织 - `editor` 已于 `2026-04-21` 退出本轮 Rust 重写范围 4. `M1` 以后任何任务引用路由、模块、SSE、静态资源与响应契约时,都必须能追溯到本阶段产出的冻结文档。 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 8793b695..0cdd553d 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,7 +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-*` 形式被主工程引用。 | +| `server-rs/` 内部采用多 crate 组织,由主工程 crate 统一引用模块 crate | 已确认 | `server-rs/` 采用 `crates/*` 工作区结构,`crates/api-server` 与 `crates/spacetime-module` 作为主工程 crate,独立模块以 `crates/module-*` 形式被主工程 crate 引用。 | | `editor` 为遗留无用模块,不纳入 `server-rs` 本轮重写范围 | 已确认 | `server-node/src/modules/editor` 与 `/api/editor/*` 仅作为历史基线保留对照;自 `2026-04-21` 起退出本轮 Rust 后端重写范围。 | ## 3. 已确认决议一:`server-rs/` 固定落在仓库根目录 @@ -61,19 +61,19 @@ Genarrative/ ### 3.3 这样落位的原因 -1. 与当前重写设计文档、任务清单、后续 `M1` 多 package 规划保持一致。 +1. 与当前重写设计文档、任务清单、后续 `M1` 多 crate 规划保持一致。 2. 允许 `server-node/` 与 `server-rs/` 在迁移期并行存在,便于逐阶段切流。 3. 让 Rust 工作区边界清晰,不污染现有前端 `src/`、`packages/`、Vite 工具链。 -4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`apps/*`、`packages/*` 时路径最直接,不需要额外中间层。 +4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`crates/*` 时路径最直接,不需要额外中间层。 ### 3.4 对后续任务的直接约束 从这一条决议开始,后续任务必须统一按以下路径落位: 1. `M1` 的工作区初始化在 `server-rs/` -2. Axum 主工程在 `server-rs/apps/api-server` -3. SpacetimeDB 主工程在 `server-rs/apps/spacetime-module` -4. 独立模块包在 `server-rs/packages/module-*` +2. Axum 主工程 crate 在 `server-rs/crates/api-server` +3. SpacetimeDB 主工程 crate 在 `server-rs/crates/spacetime-module` +4. 独立模块 crate 在 `server-rs/crates/module-*` 5. 相关脚本在 `server-rs/scripts/` ## 4. 本条任务完成定义 @@ -197,63 +197,62 @@ Genarrative/ 从这一条决议开始,后续任务必须遵守: -1. `M1` package 设计时,`platform-oss`、`platform-llm`、`platform-auth` 固定属于 Axum / 模块应用层一侧。 +1. `M1` crate 设计时,`platform-oss`、`platform-llm`、`platform-auth` 固定属于 Axum / 模块应用层一侧。 2. `M2 ~ M6` 设计 reducer 时,只写状态变更,不直接发外部请求。 3. 若确实需要异步副作用,也必须由 Axum worker 或应用层作业执行,再把结果回写 SpacetimeDB。 -## 8. 已确认决议五:`server-rs/` 内部采用多 package 组织 +## 8. 已确认决议五:`server-rs/` 内部采用多 crate 组织 ### 8.1 决议内容 从当前版本开始,`server-rs/` 内部结构固定采用: -1. `apps/*`:主工程 package -2. `packages/*`:独立模块 package -3. `scripts/*`:开发、发布、回归脚本 +1. `crates/*`:统一收口主工程 crate、独立模块 crate 与共享 crate +2. `scripts/*`:开发、发布、回归脚本 -主工程固定包含: +主工程 crate 固定包含: -1. `apps/api-server` -2. `apps/spacetime-module` +1. `crates/api-server` +2. `crates/spacetime-module` -独立模块 package 固定按“每个独立模块一个 package”推进,至少覆盖: +独立模块 crate 固定按“每个独立模块一个 crate”推进,至少覆盖: -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-ai` +1. `crates/module-auth` +2. `crates/module-runtime` +3. `crates/module-story` +4. `crates/module-combat` +5. `crates/module-inventory` +6. `crates/module-npc` +7. `crates/module-progression` +8. `crates/module-quest` +9. `crates/module-runtime-item` +10. `crates/module-custom-world` +11. `crates/module-assets` +12. `crates/module-ai` -跨模块共享 package 固定包含: +跨模块共享 crate 固定包含: -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` +1. `crates/shared-contracts` +2. `crates/shared-kernel` +3. `crates/platform-auth` +4. `crates/platform-oss` +5. `crates/platform-llm` +6. `crates/spacetime-client` +7. `crates/tests-support` ### 8.2 这样决议的原因 -1. 用户已经明确要求后端采用多 package 模式,独立模块不能继续堆回单个技术层大包。 -2. 当前后端已有 `12` 个内部模块边界,多 package 方案更容易保持一一映射与独立演进。 -3. `apps/api-server` 与 `apps/spacetime-module` 只做组合与发布,更符合“主工程引用模块包”的组织方式。 +1. 用户已经明确要求后端采用 Rust workspace 下的多 crate 模式,独立模块不能继续堆回单个技术层大包。 +2. 当前后端已有 `12` 个内部模块边界,多 crate 方案更容易保持一一映射与独立演进。 +3. `crates/api-server` 与 `crates/spacetime-module` 只做组合与发布,更符合“主工程 crate 引用模块 crate”的组织方式。 ### 8.3 对后续任务的直接约束 从这一条决议开始,后续任务必须遵守: -1. `M1` 后续目录创建任务统一按 `apps/* + packages/*` 执行,不再新增 `crates/*` 目录规划。 -2. 每个业务模块默认先有自己的 workspace package,再由主工程引用。 -3. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 package,而不是业务模块混装。 +1. `M1` 及后续目录任务统一按 `crates/*` 执行,不再保留 `apps/*` 与 `packages/*` 并行规划。 +2. 每个业务模块默认先有自己的 workspace crate,再由主工程 crate 引用。 +3. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 crate,而不是业务模块混装。 ## 9. 已确认决议六:`editor` 退出本轮 Rust 重写范围 @@ -264,19 +263,19 @@ Genarrative/ 当前固定口径为: 1. 历史基线继续保留 `server-node/src/modules/editor` 与 `/api/editor/*` 的存在事实。 -2. `server-rs/` 不再保留 `packages/module-editor`。 -3. `M1 ~ M6` 的主线任务、阶段验收与 package 规划,不再把 `editor` 计入 active rewrite scope。 +2. `server-rs/` 不再保留 `crates/module-editor`。 +3. `M1 ~ M6` 的主线任务、阶段验收与 crate 规划,不再把 `editor` 计入 active rewrite scope。 ### 9.2 这样决议的原因 1. 用户已明确确认 `editor` 为遗留无用模块,应从本轮重写目标中剔除。 2. 保留历史事实有助于后续对照清理,不会把“旧系统曾存在该模块”的信息抹掉。 -3. 从当前阶段开始继续为 `editor` 预留 Rust package,只会增加主线迁移噪音与工程负担。 +3. 从当前阶段开始继续为 `editor` 预留 Rust crate,只会增加主线迁移噪音与工程负担。 ### 9.3 对后续任务的直接约束 从这一条决议开始,后续任务必须遵守: -1. 不再为 `editor` 创建或维护 `server-rs` 下的新 package、Axum 路由树与迁移验收项。 +1. 不再为 `editor` 创建或维护 `server-rs` 下的新 crate、Axum 路由树与迁移验收项。 2. 所有涉及挂载面、模块、路由总量的文档,都要区分“历史基线”与“本轮 active rewrite target”。 3. 若未来仍要清理 `editor`,应在 `server-node/` 遗留链路依赖核对完成后单独立项。 diff --git a/backend-rewrite-tasklist/README.md b/backend-rewrite-tasklist/README.md index 3fbccb1c..190d04ef 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 package、SpacetimeDB bounded context 与 Axum/application 分工。 +- [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_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 c9ea7393..a9dbb2d8 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 @@ -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. 目标模块映射 diff --git a/server-rs/Cargo.toml b/server-rs/Cargo.toml index 363b0036..247a6e56 100644 --- a/server-rs/Cargo.toml +++ b/server-rs/Cargo.toml @@ -1,13 +1,13 @@ # 当前阶段先建立虚拟 workspace。 -# 后续按“主工程 apps + 独立模块 packages”模式逐项补充 members。 +# 后续按“主工程 crate + 独立模块 crate”模式逐项补充 members。 [workspace] resolver = "2" members = [ - "apps/api-server", + "crates/api-server", ] [workspace.package] -edition = "2021" +edition = "2024" version = "0.1.0" license = "UNLICENSED" diff --git a/server-rs/README.md b/server-rs/README.md index 30146b32..44418e12 100644 --- a/server-rs/README.md +++ b/server-rs/README.md @@ -17,29 +17,29 @@ 当前目录已经完成以下三十四项初始化: 1. 为新后端预留正式目录并把路径固定到仓库结构中。 -2. 创建虚拟 workspace `Cargo.toml`,后续 package 会逐项挂入。 -3. 明确内部采用“`apps/*` 主工程 + `packages/*` 独立模块包”的多 package 组织方式。 -4. 创建 `apps/api-server/` 目录占位,固定 Axum 主工程落位。 -5. 创建 `apps/spacetime-module/` 目录占位,固定 SpacetimeDB 主工程落位。 -6. 创建 `packages/module-auth/` 目录占位,固定鉴权模块 package 落位。 -7. 创建 `packages/module-runtime/` 目录占位,固定运行时状态基座模块 package 落位。 -8. 创建 `packages/module-story/` 目录占位,固定故事主循环模块 package 落位。 -9. 创建 `packages/module-combat/` 目录占位,固定战斗规则模块 package 落位。 -10. 创建 `packages/module-inventory/` 目录占位,固定背包与物品变更模块 package 落位。 -11. 创建 `packages/module-npc/` 目录占位,固定 NPC 状态与互动模块 package 落位。 -12. 创建 `packages/module-progression/` 目录占位,固定成长与章节推进模块 package 落位。 -13. 创建 `packages/module-quest/` 目录占位,固定任务运行时模块 package 落位。 -14. 创建 `packages/module-runtime-item/` 目录占位,固定运行时物品模块 package 落位。 -15. 创建 `packages/module-custom-world/` 目录占位,固定自定义世界与 agent 模块 package 落位。 -16. 创建 `packages/module-assets/` 目录占位,固定资产任务与对象绑定模块 package 落位。 -17. 创建 `packages/module-ai/` 目录占位,固定 AI 编排模块 package 落位。 -18. 创建 `packages/shared-contracts/` 目录占位,固定前后端兼容 contract 共享 package 落位。 -19. 创建 `packages/shared-kernel/` 目录占位,固定跨模块共享领域内核 package 落位。 -20. 创建 `packages/platform-auth/` 目录占位,固定鉴权平台适配 package 落位。 -21. 创建 `packages/platform-oss/` 目录占位,固定 OSS 平台适配 package 落位。 -22. 创建 `packages/platform-llm/` 目录占位,固定大模型平台适配 package 落位。 -23. 创建 `packages/spacetime-client/` 目录占位,固定 SpacetimeDB 客户端适配 package 落位。 -24. 创建 `packages/tests-support/` 目录占位,固定测试支撑共享 package 落位。 +2. 创建虚拟 workspace `Cargo.toml`,后续 crate 会逐项挂入。 +3. 明确内部采用“`crates/*` 统一承载主工程 crate 与独立模块 crate”的多 crate 组织方式。 +4. 创建 `crates/api-server/` 目录占位,固定 Axum 主工程 crate 落位。 +5. 创建 `crates/spacetime-module/` 目录占位,固定 SpacetimeDB 主工程 crate 落位。 +6. 创建 `crates/module-auth/` 目录占位,固定鉴权模块 crate 落位。 +7. 创建 `crates/module-runtime/` 目录占位,固定运行时状态基座模块 crate 落位。 +8. 创建 `crates/module-story/` 目录占位,固定故事主循环模块 crate 落位。 +9. 创建 `crates/module-combat/` 目录占位,固定战斗规则模块 crate 落位。 +10. 创建 `crates/module-inventory/` 目录占位,固定背包与物品变更模块 crate 落位。 +11. 创建 `crates/module-npc/` 目录占位,固定 NPC 状态与互动模块 crate 落位。 +12. 创建 `crates/module-progression/` 目录占位,固定成长与章节推进模块 crate 落位。 +13. 创建 `crates/module-quest/` 目录占位,固定任务运行时模块 crate 落位。 +14. 创建 `crates/module-runtime-item/` 目录占位,固定运行时物品模块 crate 落位。 +15. 创建 `crates/module-custom-world/` 目录占位,固定自定义世界与 agent 模块 crate 落位。 +16. 创建 `crates/module-assets/` 目录占位,固定资产任务与对象绑定模块 crate 落位。 +17. 创建 `crates/module-ai/` 目录占位,固定 AI 编排模块 crate 落位。 +18. 创建 `crates/shared-contracts/` 目录占位,固定前后端兼容 contract 共享 crate 落位。 +19. 创建 `crates/shared-kernel/` 目录占位,固定跨模块共享领域内核 crate 落位。 +20. 创建 `crates/platform-auth/` 目录占位,固定鉴权平台适配 crate 落位。 +21. 创建 `crates/platform-oss/` 目录占位,固定 OSS 平台适配 crate 落位。 +22. 创建 `crates/platform-llm/` 目录占位,固定大模型平台适配 crate 落位。 +23. 创建 `crates/spacetime-client/` 目录占位,固定 SpacetimeDB 客户端适配 crate 落位。 +24. 创建 `crates/tests-support/` 目录占位,固定测试支撑共享 crate 落位。 25. 创建 `scripts/dev.ps1`,固定 Windows 本地开发入口。 26. 创建 `scripts/dev.sh`,固定 Unix-like 本地开发入口。 27. 创建 `scripts/test.ps1`,固定 Windows 本地测试入口。 @@ -53,7 +53,7 @@ 后续任务会继续在本目录内按顺序补齐: -1. `apps/spacetime-module` 的表、reducer、view 聚合入口 +1. `crates/spacetime-module` 的表、reducer、view 聚合入口 2. `module-auth` 的身份表、JWT 与 refresh cookie 主链 ## 3. 已冻结边界 @@ -62,9 +62,9 @@ 1. 迁移期保留 `server-node/`,不提前删除。 2. 前端在 `M0 ~ M6` 期间只访问 Axum,不直连 SpacetimeDB。 -3. 外部副作用统一收口在 Axum / package 内应用层 / infra。 -4. `apps/api-server` 只组合与暴露协议,不直接吞并业务模块实现。 -5. `apps/spacetime-module` 只负责汇总各模块 package 的表、reducer、view。 +3. 外部副作用统一收口在 Axum / crate 内应用层 / infra。 +4. `crates/api-server` 只组合与暴露协议,不直接吞并业务模块实现。 +5. `crates/spacetime-module` 只负责汇总各模块 crate 的表、reducer、view。 ## 4. 关联文档 diff --git a/server-rs/apps/api-server/Cargo.toml b/server-rs/crates/api-server/Cargo.toml similarity index 100% rename from server-rs/apps/api-server/Cargo.toml rename to server-rs/crates/api-server/Cargo.toml diff --git a/server-rs/apps/api-server/README.md b/server-rs/crates/api-server/README.md similarity index 87% rename from server-rs/apps/api-server/README.md rename to server-rs/crates/api-server/README.md index 09ea73b0..e1eb1daf 100644 --- a/server-rs/apps/api-server/README.md +++ b/server-rs/crates/api-server/README.md @@ -1,10 +1,10 @@ -# api-server 主工程 package 占位说明 +# api-server 主工程 crate 占位说明 日期:`2026-04-20` -## 1. package 职责 +## 1. crate 职责 -`api-server` 是新后端的 Axum 主工程 package,后续负责: +`api-server` 是新后端的 Axum 主工程 crate,后续负责: 1. `main.rs` 启动入口 2. `Router` 装配 @@ -29,7 +29,7 @@ 7. `src/logging.rs` 8. 基础 `TraceLayer` 挂载与 `tracing subscriber` 初始化 -后续与本 package 直接相关的任务包括: +后续与本 crate 直接相关的任务包括: 1. [x] 接入统一日志与 tracing 2. [x] 接入 `request_id` @@ -78,9 +78,9 @@ 当前本地检查链路约定: 1. `../../scripts/check.ps1` 与 `../../scripts/check.sh` 统一串联 `cargo fmt --all --check`、`cargo clippy`、`cargo check`、`cargo test`。 -2. 默认检查整个 `server-rs` workspace,确保后续多 package 扩容时仍然保持统一口径。 -3. 当只需聚焦单个 package 时,可通过 `-Package` 或 `SERVER_RS_CHECK_PACKAGE` 收窄 `clippy / check / test` 目标。 -4. `cargo fmt --all --check` 仍固定覆盖整个 workspace,避免多 package 下格式基线漂移。 +2. 默认检查整个 `server-rs` workspace,确保后续多 crate 扩容时仍然保持统一口径。 +3. 当只需聚焦单个 crate 时,可通过 `-Package` 或 `SERVER_RS_CHECK_PACKAGE` 收窄 `clippy / check / test` 目标。 +4. `cargo fmt --all --check` 仍固定覆盖整个 workspace,避免多 crate 下格式基线漂移。 当前本地 smoke 链路约定: @@ -91,6 +91,6 @@ ## 3. 边界约束 1. `api-server` 负责 HTTP、SSE、Cookie、Header、路由与协议装配。 -2. 业务逻辑优先通过独立模块 package 暴露能力,再由主工程组合。 -3. 外部副作用通过 `platform-auth`、`platform-oss`、`platform-llm` 与各模块 package 的应用层完成。 +2. 业务逻辑优先通过独立模块 crate 暴露能力,再由主工程组合。 +3. 外部副作用通过 `platform-auth`、`platform-oss`、`platform-llm` 与各模块 crate 的应用层完成。 4. 不把领域规则直接堆在 handler 中。 diff --git a/server-rs/apps/api-server/src/api_response.rs b/server-rs/crates/api-server/src/api_response.rs similarity index 100% rename from server-rs/apps/api-server/src/api_response.rs rename to server-rs/crates/api-server/src/api_response.rs diff --git a/server-rs/apps/api-server/src/app.rs b/server-rs/crates/api-server/src/app.rs similarity index 100% rename from server-rs/apps/api-server/src/app.rs rename to server-rs/crates/api-server/src/app.rs diff --git a/server-rs/apps/api-server/src/config.rs b/server-rs/crates/api-server/src/config.rs similarity index 100% rename from server-rs/apps/api-server/src/config.rs rename to server-rs/crates/api-server/src/config.rs diff --git a/server-rs/apps/api-server/src/error_middleware.rs b/server-rs/crates/api-server/src/error_middleware.rs similarity index 100% rename from server-rs/apps/api-server/src/error_middleware.rs rename to server-rs/crates/api-server/src/error_middleware.rs diff --git a/server-rs/apps/api-server/src/health.rs b/server-rs/crates/api-server/src/health.rs similarity index 100% rename from server-rs/apps/api-server/src/health.rs rename to server-rs/crates/api-server/src/health.rs diff --git a/server-rs/apps/api-server/src/http_error.rs b/server-rs/crates/api-server/src/http_error.rs similarity index 100% rename from server-rs/apps/api-server/src/http_error.rs rename to server-rs/crates/api-server/src/http_error.rs diff --git a/server-rs/apps/api-server/src/logging.rs b/server-rs/crates/api-server/src/logging.rs similarity index 100% rename from server-rs/apps/api-server/src/logging.rs rename to server-rs/crates/api-server/src/logging.rs diff --git a/server-rs/apps/api-server/src/main.rs b/server-rs/crates/api-server/src/main.rs similarity index 100% rename from server-rs/apps/api-server/src/main.rs rename to server-rs/crates/api-server/src/main.rs diff --git a/server-rs/apps/api-server/src/request_context.rs b/server-rs/crates/api-server/src/request_context.rs similarity index 100% rename from server-rs/apps/api-server/src/request_context.rs rename to server-rs/crates/api-server/src/request_context.rs diff --git a/server-rs/apps/api-server/src/response_headers.rs b/server-rs/crates/api-server/src/response_headers.rs similarity index 100% rename from server-rs/apps/api-server/src/response_headers.rs rename to server-rs/crates/api-server/src/response_headers.rs diff --git a/server-rs/apps/api-server/src/state.rs b/server-rs/crates/api-server/src/state.rs similarity index 100% rename from server-rs/apps/api-server/src/state.rs rename to server-rs/crates/api-server/src/state.rs diff --git a/server-rs/packages/module-ai/README.md b/server-rs/crates/module-ai/README.md similarity index 100% rename from server-rs/packages/module-ai/README.md rename to server-rs/crates/module-ai/README.md diff --git a/server-rs/packages/module-assets/README.md b/server-rs/crates/module-assets/README.md similarity index 100% rename from server-rs/packages/module-assets/README.md rename to server-rs/crates/module-assets/README.md diff --git a/server-rs/packages/module-auth/README.md b/server-rs/crates/module-auth/README.md similarity index 76% rename from server-rs/packages/module-auth/README.md rename to server-rs/crates/module-auth/README.md index 0f9ffadb..3c467986 100644 --- a/server-rs/packages/module-auth/README.md +++ b/server-rs/crates/module-auth/README.md @@ -1,21 +1,21 @@ -# module-auth 独立模块 package 占位说明 +# module-auth 独立模块 crate 占位说明 日期:`2026-04-20` -## 1. package 职责 +## 1. crate 职责 -`module-auth` 是鉴权与会话模块 package,后续负责: +`module-auth` 是鉴权与会话模块 crate,后续负责: 1. 用户身份、会话、风控、审计相关领域模型 2. 手机验证码、微信登录、密码登录的模块内用例编排 -3. 与 `apps/api-server` 的鉴权接口装配对接 -4. 与 `apps/spacetime-module` 的身份表、会话表聚合对接 +3. 与 `crates/api-server` 的鉴权接口装配对接 +4. 与 `crates/spacetime-module` 的身份表、会话表聚合对接 ## 2. 当前阶段说明 当前阶段已冻结前六张鉴权基础表设计,剩余 `wechat_auth_state` 与 token 细节仍按顺序继续展开。 -后续与本 package 直接相关的任务包括: +后续与本 crate 直接相关的任务包括: 1. 设计 `user_account`、`auth_identity`、`refresh_session` 2. 设计 `auth_audit_log`、`auth_risk_block` @@ -34,5 +34,5 @@ ## 3. 边界约束 1. `module-auth` 负责鉴权领域规则与模块级编排,不直接把供应商 SDK 逻辑写进主工程。 -2. 短信、微信、JWT、Cookie 等平台适配优先通过 `packages/platform-auth` 承接。 -3. 身份与会话状态最终由 `apps/spacetime-module` 聚合,前端接口由 `apps/api-server` 暴露。 +2. 短信、微信、JWT、Cookie 等平台适配优先通过 `crates/platform-auth` 承接。 +3. 身份与会话状态最终由 `crates/spacetime-module` 聚合,前端接口由 `crates/api-server` 暴露。 diff --git a/server-rs/packages/module-combat/README.md b/server-rs/crates/module-combat/README.md similarity index 100% rename from server-rs/packages/module-combat/README.md rename to server-rs/crates/module-combat/README.md diff --git a/server-rs/packages/module-custom-world/README.md b/server-rs/crates/module-custom-world/README.md similarity index 100% rename from server-rs/packages/module-custom-world/README.md rename to server-rs/crates/module-custom-world/README.md diff --git a/server-rs/packages/module-inventory/README.md b/server-rs/crates/module-inventory/README.md similarity index 100% rename from server-rs/packages/module-inventory/README.md rename to server-rs/crates/module-inventory/README.md diff --git a/server-rs/packages/module-npc/README.md b/server-rs/crates/module-npc/README.md similarity index 100% rename from server-rs/packages/module-npc/README.md rename to server-rs/crates/module-npc/README.md diff --git a/server-rs/packages/module-progression/README.md b/server-rs/crates/module-progression/README.md similarity index 100% rename from server-rs/packages/module-progression/README.md rename to server-rs/crates/module-progression/README.md diff --git a/server-rs/packages/module-quest/README.md b/server-rs/crates/module-quest/README.md similarity index 100% rename from server-rs/packages/module-quest/README.md rename to server-rs/crates/module-quest/README.md diff --git a/server-rs/packages/module-runtime-item/README.md b/server-rs/crates/module-runtime-item/README.md similarity index 100% rename from server-rs/packages/module-runtime-item/README.md rename to server-rs/crates/module-runtime-item/README.md diff --git a/server-rs/packages/module-runtime/README.md b/server-rs/crates/module-runtime/README.md similarity index 100% rename from server-rs/packages/module-runtime/README.md rename to server-rs/crates/module-runtime/README.md diff --git a/server-rs/packages/module-story/README.md b/server-rs/crates/module-story/README.md similarity index 100% rename from server-rs/packages/module-story/README.md rename to server-rs/crates/module-story/README.md diff --git a/server-rs/packages/platform-auth/README.md b/server-rs/crates/platform-auth/README.md similarity index 100% rename from server-rs/packages/platform-auth/README.md rename to server-rs/crates/platform-auth/README.md diff --git a/server-rs/packages/platform-llm/README.md b/server-rs/crates/platform-llm/README.md similarity index 100% rename from server-rs/packages/platform-llm/README.md rename to server-rs/crates/platform-llm/README.md diff --git a/server-rs/packages/platform-oss/README.md b/server-rs/crates/platform-oss/README.md similarity index 100% rename from server-rs/packages/platform-oss/README.md rename to server-rs/crates/platform-oss/README.md diff --git a/server-rs/packages/shared-contracts/README.md b/server-rs/crates/shared-contracts/README.md similarity index 100% rename from server-rs/packages/shared-contracts/README.md rename to server-rs/crates/shared-contracts/README.md diff --git a/server-rs/packages/shared-kernel/README.md b/server-rs/crates/shared-kernel/README.md similarity index 100% rename from server-rs/packages/shared-kernel/README.md rename to server-rs/crates/shared-kernel/README.md diff --git a/server-rs/packages/spacetime-client/README.md b/server-rs/crates/spacetime-client/README.md similarity index 100% rename from server-rs/packages/spacetime-client/README.md rename to server-rs/crates/spacetime-client/README.md diff --git a/server-rs/apps/spacetime-module/README.md b/server-rs/crates/spacetime-module/README.md similarity index 66% rename from server-rs/apps/spacetime-module/README.md rename to server-rs/crates/spacetime-module/README.md index fb76e8dd..b968d072 100644 --- a/server-rs/apps/spacetime-module/README.md +++ b/server-rs/crates/spacetime-module/README.md @@ -1,14 +1,14 @@ -# spacetime-module 主工程 package 占位说明 +# spacetime-module 主工程 crate 占位说明 日期:`2026-04-20` -## 1. package 职责 +## 1. crate 职责 -`spacetime-module` 是新后端的 SpacetimeDB 主工程 package,后续负责: +`spacetime-module` 是新后端的 SpacetimeDB 主工程 crate,后续负责: -1. 聚合各独立模块 package 的表定义 -2. 聚合各独立模块 package 的 reducer -3. 聚合各独立模块 package 的 view / 读模型 +1. 聚合各独立模块 crate 的表定义 +2. 聚合各独立模块 crate 的 reducer +3. 聚合各独立模块 crate 的 view / 读模型 4. 生成可发布的 SpacetimeDB wasm 模块 5. 由 `../../scripts/spacetime-dev.ps1` 与 `../../scripts/spacetime-dev.sh` 驱动的本地 standalone 启动链路 @@ -16,7 +16,7 @@ 当前阶段仍未进入具体 schema 与 reducer 实现,但已经补齐本地 standalone 启动脚本,先把 SpacetimeDB 进程入口固定下来。 -后续与本 package 直接相关的任务包括: +后续与本 crate 直接相关的任务包括: 1. 建立模块聚合入口 2. 设计表、reducer、view 的聚合方式 @@ -28,10 +28,10 @@ 1. `../../scripts/spacetime-dev.ps1` 与 `../../scripts/spacetime-dev.sh` 当前固定执行 `spacetime start` 的 standalone 模式。 2. 默认监听 `127.0.0.1:3001`,避免与 `api-server` 默认 `3000` 端口冲突。 3. 本地数据目录固定到 `server-rs/.spacetimedb/local`,避免污染全局 SpacetimeDB 根目录。 -4. 当前阶段暂不自动 publish `apps/spacetime-module`,待 module 实体 scaffold 与聚合入口落地后再扩展。 +4. 当前阶段暂不自动 publish `crates/spacetime-module`,待 module 实体 scaffold 与聚合入口落地后再扩展。 ## 3. 边界约束 1. `spacetime-module` 只聚合状态模型,不直接承接 HTTP、Cookie、Header、OSS、短信、微信、LLM 等外部副作用。 -2. 每个业务模块优先在自己的 `packages/module-*` 中定义状态与规则,再由主工程聚合。 +2. 每个业务模块优先在自己的 `crates/module-*` 中定义状态与规则,再由主工程聚合。 3. 主工程不重新吞并各模块实现细节,避免回到单大包结构。 diff --git a/server-rs/packages/tests-support/README.md b/server-rs/crates/tests-support/README.md similarity index 100% rename from server-rs/packages/tests-support/README.md rename to server-rs/crates/tests-support/README.md diff --git a/server-rs/scripts/check.ps1 b/server-rs/scripts/check.ps1 index 6187c486..62151e3b 100644 --- a/server-rs/scripts/check.ps1 +++ b/server-rs/scripts/check.ps1 @@ -2,7 +2,8 @@ param( [Alias("h")] [switch]$Help, - [string]$Package = "" + [Alias("Package")] + [string]$Crate = "" ) $ErrorActionPreference = "Stop" @@ -11,12 +12,12 @@ function Write-Usage { @( 'Usage:' ' ./server-rs/scripts/check.ps1' - ' ./server-rs/scripts/check.ps1 -Package api-server' + ' ./server-rs/scripts/check.ps1 -Crate api-server' '' 'Notes:' ' 1. Run cargo fmt --all --check for the whole server-rs workspace' ' 2. Run clippy/check/test for the whole workspace by default' - ' 3. Use -Package to target one workspace package for clippy/check/test' + ' 3. Use -Crate to target one workspace crate for clippy/check/test' ) -join [Environment]::NewLine } @@ -40,7 +41,7 @@ Push-Location $serverRsDir try { cargo fmt --all --check --manifest-path $manifestPath - if ([string]::IsNullOrWhiteSpace($Package)) { + if ([string]::IsNullOrWhiteSpace($Crate)) { Write-Host "[server-rs:check] step: cargo clippy --workspace --all-targets --all-features -D warnings" cargo clippy --workspace --manifest-path $manifestPath --all-targets --all-features -- -D warnings @@ -51,15 +52,15 @@ try { cargo test --workspace --manifest-path $manifestPath } else { - Write-Host "[server-rs:check] target package: $Package" - Write-Host "[server-rs:check] step: cargo clippy -p $Package --all-targets --all-features -D warnings" - cargo clippy -p $Package --manifest-path $manifestPath --all-targets --all-features -- -D warnings + Write-Host "[server-rs:check] target crate: $Crate" + Write-Host "[server-rs:check] step: cargo clippy -p $Crate --all-targets --all-features -D warnings" + cargo clippy -p $Crate --manifest-path $manifestPath --all-targets --all-features -- -D warnings - Write-Host "[server-rs:check] step: cargo check -p $Package" - cargo check -p $Package --manifest-path $manifestPath + Write-Host "[server-rs:check] step: cargo check -p $Crate" + cargo check -p $Crate --manifest-path $manifestPath - Write-Host "[server-rs:check] step: cargo test -p $Package" - cargo test -p $Package --manifest-path $manifestPath + Write-Host "[server-rs:check] step: cargo test -p $Crate" + cargo test -p $Crate --manifest-path $manifestPath } } finally { diff --git a/server-rs/scripts/check.sh b/server-rs/scripts/check.sh index 34e8f9e2..c1c5d896 100644 --- a/server-rs/scripts/check.sh +++ b/server-rs/scripts/check.sh @@ -8,13 +8,13 @@ usage() { cat <<'EOF' 用法: ./server-rs/scripts/check.sh - SERVER_RS_CHECK_PACKAGE=api-server ./server-rs/scripts/check.sh + SERVER_RS_CHECK_CRATE=api-server ./server-rs/scripts/check.sh 说明: 1. 先执行整个 `server-rs` workspace 的 `cargo fmt --all --check` 2. 默认继续执行整个 workspace 的 `cargo clippy`、`cargo check`、`cargo test` - 3. 可通过 `SERVER_RS_CHECK_PACKAGE` 将 clippy/check/test 收窄到单个 package - 4. `cargo fmt --all --check` 始终覆盖整个 workspace,避免多 package 下格式口径漂移 + 3. 可通过 `SERVER_RS_CHECK_CRATE` 将 clippy/check/test 收窄到单个 crate + 4. `cargo fmt --all --check` 始终覆盖整个 workspace,避免多 crate 下格式口径漂移 EOF } @@ -38,16 +38,18 @@ echo "[server-rs:check] 步骤: cargo fmt --all --check" cd "${SERVER_RS_DIR}" cargo fmt --all --check --manifest-path "${MANIFEST_PATH}" -if [[ -n "${SERVER_RS_CHECK_PACKAGE:-}" ]]; then - echo "[server-rs:check] 目标 package: ${SERVER_RS_CHECK_PACKAGE}" - echo "[server-rs:check] 步骤: cargo clippy -p ${SERVER_RS_CHECK_PACKAGE} --all-targets --all-features -D warnings" - cargo clippy -p "${SERVER_RS_CHECK_PACKAGE}" --manifest-path "${MANIFEST_PATH}" --all-targets --all-features -- -D warnings +TARGET_CRATE="${SERVER_RS_CHECK_CRATE:-${SERVER_RS_CHECK_PACKAGE:-}}" - echo "[server-rs:check] 步骤: cargo check -p ${SERVER_RS_CHECK_PACKAGE}" - cargo check -p "${SERVER_RS_CHECK_PACKAGE}" --manifest-path "${MANIFEST_PATH}" +if [[ -n "${TARGET_CRATE}" ]]; then + echo "[server-rs:check] 目标 crate: ${TARGET_CRATE}" + echo "[server-rs:check] 步骤: cargo clippy -p ${TARGET_CRATE} --all-targets --all-features -D warnings" + cargo clippy -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" --all-targets --all-features -- -D warnings - echo "[server-rs:check] 步骤: cargo test -p ${SERVER_RS_CHECK_PACKAGE}" - cargo test -p "${SERVER_RS_CHECK_PACKAGE}" --manifest-path "${MANIFEST_PATH}" + echo "[server-rs:check] 步骤: cargo check -p ${TARGET_CRATE}" + cargo check -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" + + echo "[server-rs:check] 步骤: cargo test -p ${TARGET_CRATE}" + cargo test -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" else echo "[server-rs:check] 步骤: cargo clippy --workspace --all-targets --all-features -D warnings" cargo clippy --workspace --manifest-path "${MANIFEST_PATH}" --all-targets --all-features -- -D warnings diff --git a/server-rs/scripts/spacetime-dev.ps1 b/server-rs/scripts/spacetime-dev.ps1 index b6aff1d0..e1ba1e7c 100644 --- a/server-rs/scripts/spacetime-dev.ps1 +++ b/server-rs/scripts/spacetime-dev.ps1 @@ -34,8 +34,8 @@ if ([string]::IsNullOrWhiteSpace($RootDir)) { $RootDir = Join-Path $serverRsDir ".spacetimedb\local" } -if (-not (Test-Path (Join-Path $serverRsDir "apps\spacetime-module\README.md"))) { - throw "Missing server-rs/apps/spacetime-module/README.md, cannot start SpacetimeDB local dev script." +if (-not (Test-Path (Join-Path $serverRsDir "crates\spacetime-module\README.md"))) { + throw "Missing server-rs/crates/spacetime-module/README.md, cannot start SpacetimeDB local dev script." } $spacetimeCommand = Get-Command spacetime -ErrorAction SilentlyContinue @@ -56,7 +56,7 @@ Write-Host "[server-rs:spacetime-dev] working dir: $serverRsDir" Write-Host "[server-rs:spacetime-dev] root dir: $RootDir" Write-Host "[server-rs:spacetime-dev] listen addr: $listenAddress" Write-Host "[server-rs:spacetime-dev] mode: standalone" -Write-Host "[server-rs:spacetime-dev] note: module publish is deferred until apps/spacetime-module scaffold lands" +Write-Host "[server-rs:spacetime-dev] note: module publish is deferred until crates/spacetime-module scaffold lands" Push-Location $serverRsDir try { diff --git a/server-rs/scripts/spacetime-dev.sh b/server-rs/scripts/spacetime-dev.sh index f38ea8af..946a26e4 100644 --- a/server-rs/scripts/spacetime-dev.sh +++ b/server-rs/scripts/spacetime-dev.sh @@ -13,7 +13,7 @@ usage() { 说明: 1. 启动 Genarrative Rust 后端使用的本地 standalone SpacetimeDB 2. 默认把本地数据目录放到 `server-rs/.spacetimedb/local` - 3. 当前阶段只负责启动 standalone server,暂不自动 publish `apps/spacetime-module` + 3. 当前阶段只负责启动 standalone server,暂不自动 publish `crates/spacetime-module` EOF } @@ -28,8 +28,8 @@ LISTEN_HOST="${GENARRATIVE_SPACETIME_HOST:-127.0.0.1}" PORT="${GENARRATIVE_SPACETIME_PORT:-3001}" ROOT_DIR="${GENARRATIVE_SPACETIME_ROOT_DIR:-${SERVER_RS_DIR}/.spacetimedb/local}" -if [[ ! -f "${SERVER_RS_DIR}/apps/spacetime-module/README.md" ]]; then - echo "[server-rs:spacetime-dev] 未找到 apps/spacetime-module/README.md,无法启动本地 SpacetimeDB 脚本。" >&2 +if [[ ! -f "${SERVER_RS_DIR}/crates/spacetime-module/README.md" ]]; then + echo "[server-rs:spacetime-dev] 未找到 crates/spacetime-module/README.md,无法启动本地 SpacetimeDB 脚本。" >&2 exit 1 fi @@ -46,7 +46,7 @@ echo "[server-rs:spacetime-dev] 工作目录: ${SERVER_RS_DIR}" echo "[server-rs:spacetime-dev] 数据目录: ${ROOT_DIR}" echo "[server-rs:spacetime-dev] 监听地址: ${LISTEN_HOST}:${PORT}" echo "[server-rs:spacetime-dev] 模式: standalone" -echo "[server-rs:spacetime-dev] 说明: 当前阶段暂不自动 publish apps/spacetime-module" +echo "[server-rs:spacetime-dev] 说明: 当前阶段暂不自动 publish crates/spacetime-module" cd "${SERVER_RS_DIR}" spacetime --root-dir "${ROOT_DIR}" start --edition standalone --listen-addr "${LISTEN_HOST}:${PORT}" diff --git a/server-rs/scripts/test.ps1 b/server-rs/scripts/test.ps1 index d6e11c5b..7872bb0f 100644 --- a/server-rs/scripts/test.ps1 +++ b/server-rs/scripts/test.ps1 @@ -2,7 +2,8 @@ param( [Alias("h")] [switch]$Help, - [string]$Package = "" + [Alias("Package")] + [string]$Crate = "" ) $ErrorActionPreference = "Stop" @@ -11,11 +12,11 @@ function Write-Usage { @( 'Usage:' ' ./server-rs/scripts/test.ps1' - ' ./server-rs/scripts/test.ps1 -Package api-server' + ' ./server-rs/scripts/test.ps1 -Crate api-server' '' 'Notes:' ' 1. Run cargo test for the server-rs workspace by default' - ' 2. Use -Package to target one workspace package only' + ' 2. Use -Crate to target one workspace crate only' ) -join [Environment]::NewLine } @@ -36,12 +37,12 @@ Write-Host "[server-rs:test] working dir: $serverRsDir" Push-Location $serverRsDir try { - if ([string]::IsNullOrWhiteSpace($Package)) { + if ([string]::IsNullOrWhiteSpace($Crate)) { cargo test --manifest-path $manifestPath } else { - Write-Host "[server-rs:test] target package: $Package" - cargo test -p $Package --manifest-path $manifestPath + Write-Host "[server-rs:test] target crate: $Crate" + cargo test -p $Crate --manifest-path $manifestPath } } finally { diff --git a/server-rs/scripts/test.sh b/server-rs/scripts/test.sh index 43574247..c21ee403 100644 --- a/server-rs/scripts/test.sh +++ b/server-rs/scripts/test.sh @@ -6,11 +6,11 @@ usage() { cat <<'EOF' Usage: ./server-rs/scripts/test.sh - SERVER_RS_TEST_PACKAGE=api-server ./server-rs/scripts/test.sh + SERVER_RS_TEST_CRATE=api-server ./server-rs/scripts/test.sh Notes: 1. Run cargo test for the server-rs workspace by default - 2. Use SERVER_RS_TEST_PACKAGE to target one workspace package only + 2. Use SERVER_RS_TEST_CRATE to target one workspace crate only EOF } @@ -32,9 +32,11 @@ echo "[server-rs:test] working dir: ${SERVER_RS_DIR}" cd "${SERVER_RS_DIR}" -if [[ -n "${SERVER_RS_TEST_PACKAGE:-}" ]]; then - echo "[server-rs:test] target package: ${SERVER_RS_TEST_PACKAGE}" - cargo test -p "${SERVER_RS_TEST_PACKAGE}" --manifest-path "${MANIFEST_PATH}" +TARGET_CRATE="${SERVER_RS_TEST_CRATE:-${SERVER_RS_TEST_PACKAGE:-}}" + +if [[ -n "${TARGET_CRATE}" ]]; then + echo "[server-rs:test] target crate: ${TARGET_CRATE}" + cargo test -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" else cargo test --manifest-path "${MANIFEST_PATH}" fi