- 配置 pnpm workspace + Turborepo - 创建 Next.js 15 前端应用 (apps/web) - 创建 NestJS 10 后端应用 (apps/api) - 集成 Prisma ORM + Swagger + JWT 认证 - 添加共享包 (packages/shared, eslint-config, typescript-config) - 添加项目文档 (README, CLAUDE.md, docs/design.md) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Seclusion 项目设计文档
1. 项目概述
Seclusion 是一个基于 Next.js + NestJS 的全栈 Monorepo 项目模板,旨在为后续项目开发提供统一的脚手架。
2. 技术选型
| 层级 | 技术栈 | 版本 |
|---|---|---|
| 前端 | Next.js + React + TypeScript | 15 / 19 / 5.7 |
| 后端 | NestJS + Prisma + Swagger | 10 / 6 / 8 |
| 认证 | Passport + JWT | - |
| 数据库 | SQLite (可替换) | - |
| 包管理 | pnpm workspace | 9.x |
| 构建工具 | Turborepo | 2.x |
| 代码规范 | ESLint + Prettier | - |
3. 项目结构
seclusion/
├── apps/
│ ├── web/ # Next.js 前端应用
│ │ ├── src/
│ │ │ ├── app/ # App Router 页面
│ │ │ ├── components/ # React 组件
│ │ │ └── lib/ # 工具库(API 客户端等)
│ │ └── public/ # 静态资源
│ │
│ └── api/ # NestJS 后端应用
│ ├── src/
│ │ ├── auth/ # 认证模块
│ │ ├── user/ # 用户模块
│ │ ├── prisma/ # 数据库服务
│ │ └── common/ # 公共装饰器/守卫
│ └── prisma/ # Prisma schema 和迁移
│
├── packages/
│ ├── shared/ # 共享代码
│ │ └── src/
│ │ ├── types/ # 类型定义
│ │ └── utils/ # 工具函数
│ ├── eslint-config/ # ESLint 配置包
│ └── typescript-config/ # TypeScript 配置包
│
├── package.json # 根配置
├── pnpm-workspace.yaml # 工作区定义
└── turbo.json # Turborepo 任务配置
4. 架构设计
4.1 Monorepo 架构
┌─────────────────────────────────────────────────────────┐
│ Turborepo │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ apps/web │ ◄─────► │ apps/api │ │
│ │ (Next.js) │ HTTP │ (NestJS) │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ └───────────┬───────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ packages/shared │ │
│ │ (类型 + 工具函数) │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────┘
4.2 后端模块架构
AppModule
│
├── ConfigModule (全局) # 环境变量管理
├── PrismaModule (全局) # 数据库连接
├── AuthModule # 认证模块
│ ├── AuthController
│ ├── AuthService
│ ├── JwtStrategy
│ └── JwtAuthGuard
└── UserModule # 用户模块
├── UserController
└── UserService
4.3 认证流程
┌──────────┐ POST /auth/login ┌──────────────┐
│ Client │ ──────────────────────► │ AuthModule │
└──────────┘ └──────┬───────┘
▲ │
│ { accessToken } ▼
└───────────────────────────── 验证密码,生成 JWT
┌──────────┐ GET /users (Bearer) ┌──────────────┐
│ Client │ ──────────────────────► │ JwtAuthGuard │
└──────────┘ └──────┬───────┘
▲ │
│ { users } ▼
└───────────────────────────── 验证 Token,放行请求
5. 数据模型
5.1 User 模型
model User {
id String @id @default(cuid())
email String @unique
password String
name String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
6. API 接口设计
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| POST | /auth/register | 用户注册 | 否 |
| POST | /auth/login | 用户登录 | 否 |
| GET | /auth/me | 获取当前用户 | 是 |
| GET | /users | 获取所有用户 | 是 |
| GET | /users/:id | 获取指定用户 | 是 |
| PATCH | /users/:id | 更新用户信息 | 是 |
| DELETE | /users/:id | 删除用户 | 是 |
| GET | /health | 健康检查 | 否 |
7. 共享包设计
7.1 类型定义 (@seclusion/shared/types)
ApiResponse<T>- 通用 API 响应PaginationParams- 分页请求参数PaginatedResponse<T>- 分页响应User- 用户类型LoginDto/CreateUserDto- 请求 DTOAuthResponse/TokenPayload- 认证相关类型
7.2 工具函数 (@seclusion/shared/utils)
formatDate()- 日期格式化generateId()- 随机 ID 生成deepClone()- 深拷贝isEmpty()- 空值判断safeJsonParse()- 安全 JSON 解析
8. 开发规范
8.1 端口分配
- 前端: 3000
- 后端: 4000
- Swagger 文档: 4000/api/docs
8.2 环境变量
后端 (apps/api/.env)
DATABASE_URL="file:./dev.db"
JWT_SECRET="your-secret-key"
JWT_EXPIRES_IN="7d"
PORT=4000
前端 (apps/web/.env.local)
NEXT_PUBLIC_API_URL=http://localhost:4000
9. 构建依赖关系
build
├── packages/shared (先构建)
├── apps/web (依赖 shared)
└── apps/api (依赖 shared)
Turborepo 通过 ^build 依赖确保构建顺序正确。