Docs/architecture/项目结构

项目结构

NextShip 采用组织良好的结构,为可扩展性进行了优化。

目录概览

├── config/                 # 配置文件
│   └── rbac-defaults.json  # 默认 RBAC 策略
├── content/                # MDX 内容
│   ├── blog/               # 博客文章
│   └── docs/               # 文档
├── public/                 # 静态资源
├── scripts/                # 构建与部署脚本
└── src/
    ├── app/
    │   ├── [locale]/
    │   │   ├── (auth)/           # 认证页面
    │   │   │   ├── login/
    │   │   │   ├── register/
    │   │   │   └── forgot-password/
    │   │   ├── (dashboard)/      # 受保护页面
    │   │   │   ├── dashboard/    # 主仪表盘
    │   │   │   ├── users/        # 用户管理(管理员)
    │   │   │   ├── audit-logs/   # 系统日志(管理员)
    │   │   │   ├── emails/       # 邮件日志(管理员)
    │   │   │   ├── payments/     # 支付记录(管理员)
    │   │   │   ├── skus/         # 积分套餐(管理员)
    │   │   │   ├── api-pricing/  # API 定价(管理员)
    │   │   │   ├── permissions/  # RBAC 管理(管理员)
    │   │   │   ├── settings/     # 用户设置
    │   │   │   ├── billing/      # 订阅管理
    │   │   │   ├── credits/      # 积分余额
    │   │   │   ├── api-keys/     # API 密钥管理
    │   │   │   └── files/        # 文件存储
    │   │   └── (marketing)/      # 公开页面
    │   │       ├── pricing/
    │   │       ├── blog/
    │   │       ├── docs/
    │   │       └── contact/
    │   └── api/                  # API 路由
    │       ├── auth/             # Better Auth 端点
    │       ├── stripe/           # Stripe Webhooks
    │       ├── creem/            # Creem Webhooks
    │       └── v1/               # 公开 API(AI 网关)
    │
    ├── components/
    │   ├── ui/             # shadcn/ui 组件
    │   ├── layout/         # 布局组件(侧边栏、头部)
    │   ├── billing/        # 计费组件
    │   ├── files/          # 文件管理组件
    │   └── shared/         # 共享组件
    │
    ├── server/
    │   └── actions/        # Server Actions
    │       ├── admin.ts    # 管理员用户管理
    │       ├── audit.ts    # 审计日志
    │       ├── credits.ts  # 积分操作
    │       ├── email.ts    # 邮件日志
    │       ├── files.ts    # 文件操作
    │       ├── permission.ts # RBAC 操作
    │       ├── skus.ts     # SKU 管理
    │       └── ...
    │
    ├── lib/
    │   ├── db/             # 数据库
    │   │   ├── index.ts    # Drizzle 客户端
    │   │   └── schema.ts   # 表定义
    │   ├── casbin/         # Casbin RBAC
    │   │   ├── enforcer.ts # Casbin 执行器
    │   │   └── adapter.ts  # 数据库适配器
    │   ├── payment/        # 支付提供商
    │   │   ├── stripe.ts
    │   │   └── creem.ts
    │   ├── ai-gateway/     # AI API 代理
    │   ├── auth.ts         # Better Auth 配置
    │   ├── auth-client.ts  # 客户端认证
    │   ├── permissions.ts  # 权限辅助函数
    │   ├── mail.ts         # 邮件发送
    │   └── utils.ts        # 工具函数
    │
    ├── hooks/              # 自定义 React Hooks
    ├── i18n/               # 国际化
    ├── messages/           # 翻译文件(en/zh)
    ├── mail/               # 邮件模板
    │   ├── templates/      # React Email 模板
    │   └── components/     # 邮件组件
    └── types/              # TypeScript 类型定义

路由分组

Next.js 使用路由分组来组织页面:

(auth) - 认证页面

  • /login - 登录页面
  • /register - 注册页面
  • /forgot-password - 密码重置

(dashboard) - 受保护页面

需要身份认证。包含侧边栏布局。

用户页面:

  • /dashboard - 带统计数据的主仪表盘
  • /settings - 个人资料和账户设置
  • /billing - 订阅管理
  • /credits - 积分余额和购买
  • /api-keys - API 密钥管理
  • /files - 文件存储

管理员页面(需要管理员角色):

  • /users - 用户管理
  • /audit-logs - 系统审计日志
  • /emails - 邮件日志和订阅者
  • /payments - 支付记录
  • /skus - 积分套餐管理
  • /api-pricing - API 定价配置
  • /permissions - RBAC 策略管理

(marketing) - 公开页面

面向公众的营销页面。

  • /pricing - 定价方案
  • /blog - 博客列表
  • /docs - 文档
  • /contact - 联系表单

关键文件

文件用途
src/lib/auth.tsBetter Auth 配置
src/lib/db/schema.ts数据库表定义
src/lib/permissions.ts权限检查辅助函数
src/lib/casbin/enforcer.tsCasbin RBAC 执行器
config/rbac-defaults.json默认 RBAC 策略
src/i18n/config.ts支持的语言

添加新功能

  1. 新页面:添加到 src/app/[locale]/ 中对应的路由分组
  2. 新组件:添加到 src/components/(ui/ 用于基础组件,shared/ 用于可复用组件)
  3. 新 Server Action:添加到 src/server/actions/
  4. 新数据库表:添加到 src/lib/db/schema.ts,运行 pnpm db:push
  5. 新权限:在管理后台或 config/rbac-defaults.json 中添加策略