项目结构
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.ts | Better Auth 配置 |
src/lib/db/schema.ts | 数据库表定义 |
src/lib/permissions.ts | 权限检查辅助函数 |
src/lib/casbin/enforcer.ts | Casbin RBAC 执行器 |
config/rbac-defaults.json | 默认 RBAC 策略 |
src/i18n/config.ts | 支持的语言 |
添加新功能
- 新页面:添加到
src/app/[locale]/中对应的路由分组 - 新组件:添加到
src/components/(ui/ 用于基础组件,shared/ 用于可复用组件) - 新 Server Action:添加到
src/server/actions/ - 新数据库表:添加到
src/lib/db/schema.ts,运行pnpm db:push - 新权限:在管理后台或
config/rbac-defaults.json中添加策略