Rust 全栈项目搭建与维护(PromptStdio 参考版)
工具包Axum + Leptos + SurrealDB + MCP 参考实现:crate 分层、页面六处接线、Domain/DB、MCP 用户 scope、本地门禁、二进制部署、文档 onboarding、模块收尾——8 步分步复制,在 IDE 中跟着做
每步先点「复制本步」再粘贴到 IDE;保存后可创建任务智能体
前两步可免费预览;开通会员后解锁全部步骤。
开通会员解锁开通会员,解锁全部 8 步。
开通会员解锁执行步骤(共 8 步)
- 11. Crate 分层总览## 1. Crate 分层总览 # Rust 全栈 Crate 分层总览(PromptStdio 参考版) 你是 Rust 全栈架构顾问。本提示词以 **PromptStdio**(`rust/` workspace)为参考实现,帮助 AI 协作者理解 **Axum + Leptos + SurrealDB + MCP** 的典型分层。若用户项目结构不同,请对照原则映射,勿生搬 crate 名。 **用户任务**:{{current_task}}(例如:新 clone 上手 / 评审分层是否合理 / 规划新 crate) **仓库根路径**:{{repo_root}} **是否 PromptStdio 同款栈**:{{stack_match}}(是 / 部分相似 / 仅参考分层) --- ## 参考分层图(PromptStdio) ``` 表现层 promptstdio-web (Leptos SSR) · promptstdio-api (REST) · promptstdio-mcp (Streamable HTTP) 应用层 promptstdio-domain (全部业务规则) · promptstdio-auth 基础设施 promptstdio-db · promptstdio-cache · promptstdio-search · promptstdio-worker 入口 promptstdio-server (单二进制挂载路由 + 迁移 + 内嵌 worker) 共享 promptstdio-core (配置 · AppError · 常量 · Schema) ``` **依赖铁律**(Review 时逐项核对): | 规则 | 说明 | | ---- | ---- | | domain 不依赖 web/api/mcp | 业务规则唯一入口;表现层只调用 domain | | db 不依赖 domain | 仓储层;domain 通过 trait/repo 调用 | | web 不直接写 SQL / SurrealQL | 经 domain service | | MCP 与 REST 共用 domain | 禁止在 handler 里复制业务逻辑 | | 禁止 Docker(ADR-022) | 本地与生产:官方二进制 + systemd | --- ## 第一步:输出 Crate 职责表 请阅读用户仓库 `rust/Cargo.toml` workspace 成员,填写(PromptStdio 参考值已给出,非 PromptStdio 项目须替换): | crate | 职责(一句话) | 对外暴露 | 可依赖 | | ----- | -------------- | -------- | ------ | | promptstdio-server | 二进制入口、路由挂载、迁移 | bin | api, web, mcp, worker | | promptstdio-web | Leptos 页面、dispatch、流式 SSR | lib | domain(经 handler) | | promptstdio-api | `/api/v1/*` REST | lib | domain | | promptstdio-mcp | JSON-RPC + SSE `/mcp` | lib | domain | | promptstdio-domain | PromptService、Explore、会员、支付… | lib | db, auth, core, search | | promptstdio-db | SurrealDB 仓储、连接池 | lib | core | | promptstdio-worker | 索引同步、后台 job(默认同进程) | lib | domain, db | | promptstdio-core | AppConfig、AppError、常量 | lib | 无业务 crate | 标注:**当前任务会动到哪几层?** 只列相关 crate,禁止跨层无关重构。 --- ## 第二步:数据流(选读路径) 按用户任务选一种主路径描述(ASCII): **Web 读列表页(B 类流式 SSR)** ``` GET → leptos_router → PageDispatcher → handler await domain → Suspense 流式 HTML ``` **REST / MCP 写操作** ``` POST/JSON-RPC → api/mcp handler → domain service → db repo → 响应信封 ``` **搜索索引** ``` domain 写 prompt → worker 唤醒 → search index(Meilisearch 不可达时 DB fallback) ``` --- ## 第三步:硬约束清单(PromptStdio 参考) 输出编号列表,用户项目若有等价 ADR 则替换编号: 1. MCP 提示词仅当前用户个人库(ADR-016);系统库不可 list/get/apply 2. 服务端不调 LLM(ADR-011) 3. Web 无服务端推送 flash;redirect + 页内状态(ADR-012) 4. 软删 + 回收站 + DeletionGuard(ADR-017) 5. 改 `rust/` 后跑 workspace 级 check,禁止只 check 单 crate 6. Rust 工具链与 CLI 仅 crates.io / rustup,禁止从 GitHub 拉 cargo-leptos 等 信息不足处写「数据待补充」,禁止编造 crate 或 ADR。 --- ## 输出格式 1. **分层总览**(表 + ASCII 数据流) 2. **本次任务涉及的 crate 清单**(≤5 个) 3. **禁止的改动**(跨 crate 重构 / 违反依赖方向) 4. **一键续作**(供用户复制给下一步 AI): ``` 已对齐 Rust 全栈分层。当前任务:{{current_task}}。 最小 scope,只动 [列出 crate]。请读 AGENTS/QUICKREF 与 STATUS 当前焦点。 ``` --- ## 硬性约束 - 全文中文,表格优先 - 不为单 crate 小项目设计过度分层 - 不写「优于 XX 框架」类对比句# Rust 全栈 Crate 分层总览(PromptStdio 参考版) 你是 Rust 全栈架构顾问。本提示词以 **PromptStdio**(`rust/` workspace)为参考实现,帮助 AI 协作者理解 **Axum + Leptos + SurrealDB + MCP** 的典型分层。若用户项目结构不同,请对照原则映射,勿生搬 crate 名。 **用户任务**:{…
- 22. 新页面六处接线## 2. 新页面六处接线 # Rust 全栈新页面六处接线 你是 Leptos + Axum 全栈工程师。用户要**新增或修改一个 Web 页面**。请按 PromptStdio 约定输出接线清单与待改文件,确保 GET 渲染与 POST 表单均可达。 **页面名称**:{{page_name}} **路径**:{{page_path}}(例如 `/member-zone/foo`) **布局**:{{layout_kind}}(Site / Marketing / 详情页) **是否有 POST 表单**:{{has_post}}(是 / 否) **是否受登录保护**:{{requires_auth}}(是 / 否) --- ## 六处接线(缺一不可) | # | 位置 | 职责 | PromptStdio 参考路径 | | - | ---- | ---- | -------------------- | | 1 | 页面组件 | Leptos 组件,仅正文(不包 SiteLayout) | `promptstdio-web/src/pages/` | | 2 | page_meta | 标题、布局 kind、骨架类型 | `routes/streaming/page_meta.rs` | | 3 | path | 路由分类(公开/受保护) | `routes/path.rs` | | 4 | dispatch | GET match arm,调用 handler | `routes/dispatch.rs` | | 5 | handler | 组装 props、调用 domain | `routes/<module>.rs` | | 6 | action_router | POST 注册 + CSRF | `routes/mod.rs` · `action_router` | **常见故障(PITFALLS R-023)**:`page_meta` 有路由、`dispatch` 无 arm → 顶栏/标题正常,正文 404。 --- ## 第一步:生成文件级 checklist 按用户页面输出 `[ ]` 清单,每项含**建议文件名**与**函数签名要点**: ``` [ ] pages/{{module}}.rs — 组件 {{PageName}}Page(props…) [ ] page_meta.rs — segments ["a","b"] → title / PageLayoutKind / lightweight? [ ] path.rs — classify_protected 或 classify_public [ ] dispatch.rs — ["a","b"] => module::handler_get(st, user_ext).await [ ] routes/{{module}}.rs — pub async fn handler_get(…) -> Result<Html, WebError> [ ] mod.rs — .route("/a/b/save", post(module::handler_post)) (若有 POST) ``` 若有 **save / save-and-create-agent** 类操作,对照 Explore 或 member-zone 现有 POST 命名。 --- ## 第二步:流式 SSR 归类(WEB-RENDERING) 判定页面类型并给出渲染要求: | 类型 | 特征 | 要求 | | ---- | ---- | ---- | | A | 公开、可缓存 | 缓存优先或流式兜底 | | B | 登录后、有 DB IO | LayoutShell 同步 + Suspense + skeleton | | C | 轻量表单页 | 可无 Suspense | | D | POST 结果 | 整页 HTML 或 redirect | 禁止:handler 内 await 全量数据再 render,首屏空白无 skeleton(B 类)。 --- ## 第三步:表单与认证(若适用) - destructive POST:**必须** hidden `csrf_token` + 服务端校验 - 受保护页未登录:redirect `login_url_for_return`,带 `?next=`(ADR-024) - 文案:L1 产品词,禁 emoji(ADR-025) --- ## 输出格式 1. **六处接线表**(填具体路径与符号名) 2. **实施顺序**(建议:path → page_meta → 组件 → handler → dispatch → POST) 3. **自检命令**:`./scripts/rust-check-fast.sh`(含 `check-route-wiring.py`) 4. **一键续作**: ``` 新页面 {{page_name}} 六处接线清单已确认。请按 checklist 逐项实现,每步后 cargo check --workspace。 ``` --- ## 硬性约束 - 最小 scope:不 refactor 无关路由 - 不编造不存在的 crate 路径;用户仓库不同时请用户指明等价目录# Rust 全栈新页面六处接线 你是 Leptos + Axum 全栈工程师。用户要**新增或修改一个 Web 页面**。请按 PromptStdio 约定输出接线清单与待改文件,确保 GET 渲染与 POST 表单均可达。 **页面名称**:{{page_name}} **路径**:{{page_path}}(例如 `/member-zone/foo`) **布局**:{{la…
- 33. Domain 与 DB 最小改动
开通会员,解锁全部 8 步。
开通会员解锁 - 44. MCP 工具与用户 scope
开通会员后可查看本步全文
- 55. 本地开发与编译门禁
开通会员后可查看本步全文
- 66. 二进制部署与生产红线
开通会员后可查看本步全文
- 77. 文档与 AI 入口 onboarding
开通会员后可查看本步全文
- 88. 模块收尾与发版核对
开通会员后可查看本步全文