项目目录结构
预计阅读时间: 6 分钟 预计阅读时间: 6 分钟summerrs-admin 是一个 cargo workspace,根 Cargo.toml 列出全部成员:
顶层结构
summerrs-admin
crates# 所有 Rust 代码
config# 多环境 toml 配置(app.toml + app-dev/prod/test.toml)
sql# 数据库 source of truth(按域分文件夹)
doc# 部署 / 迁移 / 技术指南(中文为主)
docs# 调研、研究、参考资料(对外文档站独立另一个仓库)
locales# rust-i18n 国际化资源(zh.yml / en.yml)
build-tools# fmt / clippy / pre-commit 脚本
data# 静态数据(ip2region xdb、JWT key 等)
nginx# 部署用 nginx 配置 + 证书
skills# Claude Code 等 AI 工具的 skill 配置
docker-compose.yml# 一键拉起 postgres / redis / rustfs / app
Dockerfile# 多阶段构建
Cargo.toml# workspace 根
crates 子目录
crates
app# 二进制入口,只组装,不放业务
Cargo.toml
src
main.rs# add_plugin(...) 全部插件
router.rs# axum Router 拼装
summer-admin-macros# 声明式宏(#[login] / #[has_perm] / #[rate_limit] / #[log] / #[job_handler])
summer-auth# JWT 鉴权 + 会话 + 路径策略
summer-common# 通用类型(ApiResult / Json<T> / 分页 / 校验 / extractor)
summer-domain# 领域服务(MenuDomainService / DictDomainService 等),不依赖 web 层
summer-system# 系统业务(用户 / 角色 / 菜单 / 字典 / 配置 / 文件 / 通知 / 监控)
src
lib.rs
router# 19 个路由文件,一个文件一个域
service# 对应 service 层,负责事务和聚合
plugins# PermBitmapPlugin / SocketGatewayPlugin
socketio# Socket.IO connection / core / handler
job# 系统域定时任务
model# 子 crate:entity / dto / vo / views(纯数据契约)
summer-ai# 父 crate(re-export 子 crate)
core# 协议核心(共享类型与 trait)
model# SeaORM 实体 + DTO / VO
relay# 中转引擎 + OpenAI/Claude/Gemini 子路由
admin# AI 管理后台(channel / vendor / token / quota...)
billing# 三阶段计费 + 配额扣减
agent# rig-core 驱动的 Agent
summer-sharding# 分片 / 多租户 / SQL 改写引擎(下层)
summer-sql-rewrite# 鉴权信息注入 SQL(上层)
summer-mcp# 嵌入式 / 独立 MCP Server
src
plugin.rs
server.rs
runtime.rs
config.rs
prompts.rs
table_tools# schema / query_builder / sql_scanner / router
tools# entity / admin module / frontend bundle 生成器
summer-plugins# 共享基础插件(S3 / IP2Region / 后台任务 / 批量日志)
summer-job-dynamic# 动态调度器(数据库驱动 cron)
关键文件锚点
crate 划分原则
参照仓库 skills/summerrs-admin/SKILL.md:
crates/app—— 只放组装代码(main.rs/router.rs),不要放业务逻辑。crates/summer-system—— 系统域业务代码全部在这里(用户、角色、菜单等)。crates/summer-system/model—— 系统域的 Entity / DTO / VO / Views,纯数据契约,不引 web。crates/summer-ai/model—— AI 模型契约 (Entity / DTO / VO)。crates/summer-ai/relay—— AI 中转的运行时与协议适配。crates/summer-plugins—— 共享基础设施插件(S3 / IP / 后台任务 / 批量日志),不绑定特定业务。crates/summer-domain—— 领域服务,跨 crate 复用(例如 MCP 和 system 都用MenuDomainService)。
新增业务模块的标准流程
假设要加一个"标签管理":
- 建表 SQL → 在
sql/sys/tag.sql写好 DDL + 初始数据。 - 生成 SeaORM Entity → 用 MCP 的
generate_entity_from_table工具生成,落到crates/summer-system/model/src/entity/sys_tag.rs。 - DTO / VO →
crates/summer-system/model/src/dto/sys_tag.rs+vo/sys_tag.rs。 - Service →
crates/summer-system/src/service/sys_tag_service.rs(事务、聚合、策略)。 - Router →
crates/summer-system/src/router/sys_tag.rs,加上#[has_perm("system:tag:list")]等宏。 - 挂载 → 在
crates/summer-system/src/router/mod.rs加let router = sys_tag::routes(router);。 - 菜单 + 字典 → 用 MCP 的
menu_tool::plan_apply把菜单和按钮权限批量写入sys.menu。
推荐先用 MCP 工具批量生成,再手工调整。这样命名风格和文件位置自然贴合现有约定。
测试与脚本
- 格式化 ——
cargo fmt或build-tools/pre-commit(整合 fmt + clippy) - lint ——
cargo clippy --workspace --all-targets --all-features - 构建 ——
cargo build --release -p app - 运行 ——
cargo run -p app --release(读.env)
