Project Structure

Estimated reading time: 2 minutes 预计阅读时间: 2 分钟

summerrs-admin is a Cargo workspace with all business code organized as independent crates.

Workspace Members

From root Cargo.toml:

[workspace]
members = [
    "crates/app",
    "crates/summer-admin-macros",
    "crates/summer-auth",
    "crates/summer-common",
    "crates/summer-domain",
    "crates/summer-mcp",
    "crates/summer-migration",
    "crates/summer-plugins",
    "crates/summer-system",
    "crates/summer-system/model",
]

Top-Level Layout

summerrs-admin
crates# All Rust code
config# Multi-environment config (app.toml, app-dev.toml, app-prod.toml)
data# Static data (ip2region DB, JWT keys, etc.)
build-tools# Format and lint scripts
locales# I18n resources (rust-i18n)
logs# Runtime logs
doc# Deployment docs, technical guides
docs# Research materials
docker-compose.yml# One-shot environment
Dockerfile# Multi-stage build
Cargo.toml# Workspace root

Crates Structure

Core Crates

CratePurpose
appBinary entry point, assembles all plugins and routes
summer-systemSystem management (users, roles, menus, dicts, config, files, notifications, logs, monitoring)
summer-system/modelSystem domain data models (Entity / DTO / VO), web-agnostic

Infrastructure Crates

CratePurpose
summer-commonCommon types (ApiResult, pagination, validation, extractors)
summer-authJWT auth, session management, permission policies
summer-domainDomain services (MenuDomainService, DictDomainService), cross-crate reuse
summer-pluginsInfrastructure plugins (S3, IP2Region, background tasks, batch logging)
summer-admin-macrosDeclarative macros (#[login], #[has_perm], #[rate_limit], #[log])

Tool Crates

CratePurpose
summer-mcpMCP Server (schema discovery, table CRUD, code generation, menu/dict tools)
summer-migrationDatabase migrations (SeaORM migration)

Key Files

Entry and Config

FilePurpose
crates/app/src/main.rsApplication entry, plugin registration
crates/app/src/router.rsGlobal route assembly
config/app.tomlDefault config
config/app-dev.tomlDevelopment config
config/app-prod.tomlProduction config

System Domain

FilePurpose
crates/summer-system/src/router/System routes (users, roles, menus, etc.)
crates/summer-system/src/service/Business logic layer (Services)
crates/summer-system/model/src/entity/SeaORM entities
crates/summer-system/model/src/dto/Request DTOs
crates/summer-system/model/src/vo/Response VOs

MCP

FilePurpose
crates/summer-mcp/src/plugin.rsMCP plugin entry
crates/summer-mcp/src/server.rsMCP server implementation
crates/summer-mcp/src/tools/MCP tools (code generation, etc.)
crates/summer-mcp/templates/Code generation templates

Crate Organization Principles

  1. app - Assembly only, no business logic
  2. summer-system - All system management business code
  3. summer-system/model - Pure data models, no web/service dependencies
  4. summer-common - Truly generic types and utilities
  5. summer-plugins - Reusable infrastructure plugins
  6. summer-domain - Cross-module domain services

Configuration Loading

Config files switch via SUMMER_ENV environment variable:

SUMMER_ENVLoaded Files
Unset or devapp.toml + app-dev.toml
prodapp.toml + app-prod.toml
testapp.toml + app-test.toml

Environment variable interpolation:

[sea-orm]
uri = "${DATABASE_URL:postgres://admin:123456@localhost/summerrs-admin}"

[auth]
jwt_secret = "${JWT_SECRET:change-me-in-local-dev}"

Common Commands

# Format
cargo fmt

# Lint
cargo clippy --workspace --all-targets

# Build
cargo build --release --bin app

# Run
cargo run --bin app

Next Steps