254 lines
5.4 KiB
Markdown
254 lines
5.4 KiB
Markdown
# 优艺家沙发翻新小程序后端
|
||
|
||
基于 Node.js + NestJS + TypeORM 构建的沙发翻新服务小程序后端系统。
|
||
|
||
## 技术栈
|
||
|
||
- **框架**: NestJS v11.x
|
||
- **数据库**: MySQL
|
||
- **ORM**: TypeORM v0.3.x
|
||
- **认证**: JWT (JSON Web Token)
|
||
- **验证**: class-validator + class-transformer
|
||
- **文档**: Swagger/OpenAPI
|
||
- **开发语言**: TypeScript
|
||
|
||
## 功能模块
|
||
|
||
### 🔐 认证模块 (Auth)
|
||
- 用户注册/登录
|
||
- JWT Token 认证
|
||
- 角色权限控制 (admin/customer/worker)
|
||
- 刷新 Token 机制
|
||
|
||
### 👤 用户管理 (User)
|
||
- 用户信息管理
|
||
- 个人资料修改
|
||
- 用户状态管理
|
||
- 管理员用户操作
|
||
|
||
### 📸 案例管理 (Case)
|
||
- 案例展示 (翻新前后对比)
|
||
- 按服务类型筛选
|
||
- 案例点赞功能
|
||
- 我的案例管理
|
||
|
||
### 🔧 服务管理 (Service)
|
||
- 服务项目配置
|
||
- 价格管理
|
||
- 服务状态控制
|
||
- 排序管理
|
||
|
||
### 📅 预约管理 (Booking)
|
||
- 在线预约服务
|
||
- 预约状态跟踪
|
||
- 工人分配
|
||
- 价格报价
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── auth/ # 认证模块
|
||
│ ├── dto/ # 数据传输对象
|
||
│ ├── guards/ # 路由守卫
|
||
│ ├── strategies/ # 认证策略
|
||
│ └── decorators/ # 装饰器
|
||
├── user/ # 用户管理
|
||
├── case/ # 案例管理
|
||
├── service/ # 服务管理
|
||
├── booking/ # 预约管理 (待开发)
|
||
├── entities/ # 数据库实体
|
||
├── config/ # 配置文件
|
||
└── main.ts # 应用入口
|
||
```
|
||
|
||
## 环境要求
|
||
|
||
- Node.js >= 18.x
|
||
- MySQL >= 8.0
|
||
- npm >= 9.x
|
||
|
||
## 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 2. 环境配置
|
||
|
||
复制环境配置文件并填写配置信息:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
配置 `.env` 文件中的数据库连接信息:
|
||
|
||
```env
|
||
# 数据库配置
|
||
DB_HOST=localhost
|
||
DB_PORT=3306
|
||
DB_USER=root
|
||
DB_PASS=your_password
|
||
DB_NAME=sofa_renovation
|
||
|
||
# JWT 配置
|
||
JWT_SECRET=your-super-secret-key
|
||
JWT_EXPIRES_IN=7d
|
||
JWT_REFRESH_SECRET=your-refresh-secret
|
||
JWT_REFRESH_EXPIRES_IN=30d
|
||
|
||
# 服务器配置
|
||
PORT=3000
|
||
NODE_ENV=development
|
||
|
||
# 文件上传配置
|
||
UPLOAD_DIR=uploads
|
||
MAX_FILE_SIZE=5242880
|
||
FRONTEND_URL=http://localhost:3000
|
||
```
|
||
|
||
### 3. 数据库准备
|
||
|
||
确保 MySQL 服务运行,并创建数据库:
|
||
|
||
```sql
|
||
CREATE DATABASE sofa_renovation CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
```
|
||
|
||
### 4. 启动应用
|
||
|
||
```bash
|
||
# 开发模式
|
||
npm run start:dev
|
||
|
||
# 生产模式
|
||
npm run start:prod
|
||
```
|
||
|
||
应用启动后访问:
|
||
- 应用地址: http://localhost:3000
|
||
- API 文档: http://localhost:3000/docs
|
||
|
||
## API 文档
|
||
|
||
项目集成了 Swagger,启动服务后可以通过以下地址访问 API 文档:
|
||
|
||
```
|
||
http://localhost:3000/docs
|
||
```
|
||
|
||
### 主要 API 端点
|
||
|
||
#### 认证相关
|
||
- `POST /api/auth/register` - 用户注册
|
||
- `POST /api/auth/login` - 用户登录
|
||
- `POST /api/auth/refresh` - 刷新令牌
|
||
|
||
#### 用户管理
|
||
- `GET /api/users/profile` - 获取个人信息
|
||
- `PATCH /api/users/profile` - 更新个人信息
|
||
- `GET /api/users` - 获取用户列表 (管理员)
|
||
|
||
#### 案例管理
|
||
- `GET /api/cases` - 获取案例列表
|
||
- `GET /api/cases/:id` - 获取案例详情
|
||
- `POST /api/cases` - 创建案例 (工人/管理员)
|
||
- `POST /api/cases/:id/like` - 点赞案例
|
||
|
||
#### 服务管理
|
||
- `GET /api/services` - 获取服务列表
|
||
- `GET /api/services/active` - 获取有效服务
|
||
- `POST /api/services` - 创建服务 (管理员)
|
||
|
||
## 数据库设计
|
||
|
||
### 用户表 (users)
|
||
- 支持多角色:admin(管理员)、customer(客户)、worker(工人)
|
||
- 用户状态管理:active、inactive、banned
|
||
|
||
### 案例表 (cases)
|
||
- 翻新前后图片对比
|
||
- 按服务类型分类
|
||
- 浏览量和点赞统计
|
||
|
||
### 服务表 (services)
|
||
- 服务类型:面料翻新、皮革翻新、清洁、维修、定制
|
||
- 基础价格和预估工期
|
||
- 排序和状态管理
|
||
|
||
### 预约表 (bookings)
|
||
- 预约流程状态跟踪
|
||
- 客户信息和服务需求
|
||
- 工人分配和价格管理
|
||
|
||
## 开发指南
|
||
|
||
### 添加新的 API 接口
|
||
|
||
1. 在对应模块的 `dto` 文件夹中定义数据传输对象
|
||
2. 在 `service` 中实现业务逻辑
|
||
3. 在 `controller` 中定义路由和接口
|
||
4. 添加适当的权限控制和验证
|
||
|
||
### 权限控制
|
||
|
||
使用装饰器进行权限控制:
|
||
|
||
```typescript
|
||
// 公开接口 (无需认证)
|
||
@Public()
|
||
|
||
// 需要特定角色
|
||
@Roles('admin', 'worker')
|
||
|
||
// 获取当前用户信息
|
||
@CurrentUser() user: CurrentUserData
|
||
```
|
||
|
||
## 部署说明
|
||
|
||
### 生产环境配置
|
||
|
||
1. 设置 `NODE_ENV=production`
|
||
2. 配置安全的 JWT 密钥
|
||
3. 关闭数据库同步 `synchronize: false`
|
||
4. 使用数据库迁移管理数据结构变更
|
||
|
||
### Docker 部署 (可选)
|
||
|
||
```dockerfile
|
||
FROM node:18-alpine
|
||
WORKDIR /app
|
||
COPY package*.json ./
|
||
RUN npm install
|
||
COPY . .
|
||
RUN npm run build
|
||
EXPOSE 3000
|
||
CMD ["npm", "run", "start:prod"]
|
||
```
|
||
|
||
## 贡献指南
|
||
|
||
1. Fork 项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 打开 Pull Request
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
||
|
||
## 联系方式
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 项目 Issues: [GitHub Issues](https://github.com/your-username/sofa-renovation-backend/issues)
|
||
- 邮箱: your-email@example.com
|
||
|
||
---
|
||
|
||
*优艺家沙发翻新 - 让老沙发焕然一新* ✨ |