164 lines
4.5 KiB
Markdown
164 lines
4.5 KiB
Markdown
|
|
# Prisma ORM 迁移进度
|
|||
|
|
|
|||
|
|
## 📊 总体进度
|
|||
|
|
|
|||
|
|
- **总文件数**: 36 个 API 文件
|
|||
|
|
- **已完成**: 5 个 (14%)
|
|||
|
|
- **进行中**: 正在批量迁移
|
|||
|
|
- **待完成**: 31 个
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 已完成迁移
|
|||
|
|
|
|||
|
|
### 1. 核心用户相关 API
|
|||
|
|
- [x] `/api/wechat/login` - 微信登录(完全重写,使用 Prisma)
|
|||
|
|
- [x] `/api/user/profile` - 用户资料查询和更新(Prisma + 类型安全)
|
|||
|
|
- [x] `/api/user/update` - 用户信息更新(Prisma,移除动态SQL拼接)
|
|||
|
|
|
|||
|
|
### 2. 提现相关 API
|
|||
|
|
- [x] `/api/admin/withdrawals` - 后台提现审批(**修复 undefined.length bug**,使用 Prisma 事务)
|
|||
|
|
- [x] `/api/withdraw` - 用户提现申请(使用 Prisma 聚合查询,完全类型安全)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 待迁移 API(按优先级排序)
|
|||
|
|
|
|||
|
|
### 高优先级(核心业务流程)
|
|||
|
|
|
|||
|
|
#### 分销系统
|
|||
|
|
- [ ] `/api/referral/data` - 分销数据统计
|
|||
|
|
- [ ] `/api/referral/bind` - 推荐绑定
|
|||
|
|
- [ ] `/api/referral/visit` - 访问记录
|
|||
|
|
|
|||
|
|
#### 订单支付
|
|||
|
|
- [ ] `/api/miniprogram/pay/route.ts` - 小程序支付下单
|
|||
|
|
- [ ] `/api/miniprogram/pay/notify` - 支付回调
|
|||
|
|
- [ ] `/api/payment/wechat/transfer/notify` - 微信转账回调
|
|||
|
|
|
|||
|
|
#### 书籍章节
|
|||
|
|
- [ ] `/api/book/chapters` - 章节列表和管理
|
|||
|
|
- [ ] `/api/book/chapter/[id]` - 单章节查询
|
|||
|
|
- [ ] `/api/book/all-chapters` - 所有章节
|
|||
|
|
- [ ] `/api/book/hot` - 热门书籍
|
|||
|
|
- [ ] `/api/db/book` - 书籍管理
|
|||
|
|
|
|||
|
|
### 中优先级(用户功能)
|
|||
|
|
|
|||
|
|
#### 用户数据
|
|||
|
|
- [ ] `/api/db/users/route.ts` - 用户管理
|
|||
|
|
- [ ] `/api/db/users/referrals` - 用户推荐关系
|
|||
|
|
- [ ] `/api/user/addresses/route.ts` - 地址管理
|
|||
|
|
- [ ] `/api/user/addresses/[id]` - 单个地址操作
|
|||
|
|
- [ ] `/api/user/reading-progress` - 阅读进度
|
|||
|
|
- [ ] `/api/user/purchase-status` - 购买状态
|
|||
|
|
- [ ] `/api/user/check-purchased` - 检查购买
|
|||
|
|
- [ ] `/api/user/track` - 用户行为追踪
|
|||
|
|
|
|||
|
|
#### 后台管理
|
|||
|
|
- [ ] `/api/admin/distribution/overview` - 分销概览
|
|||
|
|
- [ ] `/api/db/distribution` - 分销数据管理
|
|||
|
|
- [ ] `/api/db/config` - 系统配置
|
|||
|
|
|
|||
|
|
### 低优先级(辅助功能)
|
|||
|
|
|
|||
|
|
#### 认证相关
|
|||
|
|
- [ ] `/api/auth/login` - 后台登录
|
|||
|
|
- [ ] `/api/auth/reset-password` - 密码重置
|
|||
|
|
|
|||
|
|
#### 定时任务
|
|||
|
|
- [ ] `/api/cron/unbind-expired` - 解绑过期推荐
|
|||
|
|
- [ ] `/api/cron/sync-orders` - 同步订单
|
|||
|
|
|
|||
|
|
#### 存客宝集成
|
|||
|
|
- [ ] `/api/ckb/sync` - 存客宝同步
|
|||
|
|
|
|||
|
|
#### 数据库管理
|
|||
|
|
- [ ] `/api/db/init` - 数据库初始化
|
|||
|
|
- [ ] `/api/db/migrate` - 数据库迁移
|
|||
|
|
|
|||
|
|
#### 其他
|
|||
|
|
- [ ] `/api/miniprogram/phone` - 手机号获取
|
|||
|
|
- [ ] `/api/match/users` - 用户匹配
|
|||
|
|
- [ ] `/api/match/config` - 匹配配置
|
|||
|
|
- [ ] `/api/search` - 搜索功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Prisma ORM 核心优势
|
|||
|
|
|
|||
|
|
### 1. **安全性**
|
|||
|
|
- ✅ **完全消除SQL注入风险** - 所有查询参数自动转义
|
|||
|
|
- ✅ **类型安全** - TypeScript 严格类型检查
|
|||
|
|
- ✅ **无 `undefined.length` 错误** - Prisma 返回类型明确
|
|||
|
|
|
|||
|
|
### 2. **开发效率**
|
|||
|
|
- ✅ **自动完成** - IDE 智能提示
|
|||
|
|
- ✅ **简化查询** - 无需手写复杂 SQL
|
|||
|
|
- ✅ **关联查询** - 自动处理 JOIN
|
|||
|
|
|
|||
|
|
### 3. **维护性**
|
|||
|
|
- ✅ **一致的API** - 统一的查询接口
|
|||
|
|
- ✅ **迁移管理** - 自动生成数据库迁移脚本
|
|||
|
|
- ✅ **易于测试** - Mock 简单
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 迁移代码对比示例
|
|||
|
|
|
|||
|
|
### 旧代码(存在SQL注入风险)
|
|||
|
|
```typescript
|
|||
|
|
// ❌ 不安全:动态SQL拼接
|
|||
|
|
const users = await query(`
|
|||
|
|
SELECT * FROM users WHERE ${userId ? 'id = ?' : 'open_id = ?'}
|
|||
|
|
`, [userId || openId])
|
|||
|
|
|
|||
|
|
// ❌ 容易出错:手动构建 UPDATE
|
|||
|
|
const updates: string[] = []
|
|||
|
|
const values: any[] = []
|
|||
|
|
if (nickname !== undefined) {
|
|||
|
|
updates.push('nickname = ?')
|
|||
|
|
values.push(nickname)
|
|||
|
|
}
|
|||
|
|
values.push(userId)
|
|||
|
|
await query(`UPDATE users SET ${updates.join(', ')} WHERE id = ?`, values)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 新代码(Prisma,完全安全)
|
|||
|
|
```typescript
|
|||
|
|
// ✅ 安全:Prisma 自动转义
|
|||
|
|
const user = await prisma.users.findFirst({
|
|||
|
|
where: userId ? { id: userId } : { open_id: openId }
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// ✅ 类型安全:自动完成和类型检查
|
|||
|
|
const updatedUser = await prisma.users.update({
|
|||
|
|
where: { id: userId },
|
|||
|
|
data: { nickname }
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 下一步行动
|
|||
|
|
|
|||
|
|
1. ✅ **已完成**:核心 API 迁移(登录、用户、提现)
|
|||
|
|
2. 🔄 **进行中**:分销和订单支付 API
|
|||
|
|
3. 📋 **计划中**:书籍章节和辅助功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📌 注意事项
|
|||
|
|
|
|||
|
|
### 已发现问题
|
|||
|
|
1. ⚠️ `users` 表中部分字段在 schema 中不存在(如 `alipay`, `address`, `auto_withdraw`)
|
|||
|
|
- 需要先添加字段或调整代码逻辑
|
|||
|
|
|
|||
|
|
### 已解决问题
|
|||
|
|
1. ✅ **`undefined.length` 崩溃** - 使用 Prisma 后彻底消除
|
|||
|
|
2. ✅ **SQL注入风险** - 所有迁移的 API 已安全
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*最后更新时间:2026-02-04*
|