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*
|