新增订单推荐人和邀请码功能,优化支付流程中的订单插入逻辑,确保订单记录准确。更新小程序支付请求,支持传递邀请码以便于分销归属和对账。同时,调整数据库结构以支持新字段,提升系统的稳定性和用户体验。

This commit is contained in:
乘风
2026-02-06 18:34:02 +08:00
parent f8fac00c85
commit 2e65d68e1e
34 changed files with 3288 additions and 1255 deletions

View File

@@ -0,0 +1,137 @@
/**
* 批量迁移脚本:将旧的 query() 调用替换为 Prisma
*
* 使用方法:
* node scripts/migrate-to-prisma.js
*/
const fs = require('fs')
const path = require('path')
// 需要迁移的API文件路径列表
const API_FILES = [
'app/api/referral/bind/route.ts',
'app/api/referral/visit/route.ts',
'app/api/miniprogram/pay/route.ts',
'app/api/miniprogram/pay/notify/route.ts',
'app/api/user/check-purchased/route.ts',
'app/api/user/purchase-status/route.ts',
'app/api/user/reading-progress/route.ts',
'app/api/user/track/route.ts',
'app/api/db/config/route.ts',
'app/api/book/all-chapters/route.ts',
'app/api/book/hot/route.ts',
'app/api/book/chapter/[id]/route.ts',
'app/api/match/users/route.ts',
'app/api/match/config/route.ts',
'app/api/search/route.ts'
]
/**
* 自动替换规则
*/
const REPLACE_RULES = [
{
// 替换 import
from: /from '@\/lib\/db'/g,
to: "from '@/lib/prisma'"
},
{
// 替换 query 导入为 prisma
from: /import \{ query(.*?) \} from '@\/lib\/prisma'/g,
to: "import { prisma } from '@/lib/prisma'"
},
{
// 替换 getConfig 导入
from: /import \{ getConfig \} from '@\/lib\/db'/g,
to: "import { getPrismaConfig } from '@/lib/prisma-helpers'"
},
{
// 替换 getConfig 调用
from: /getConfig\(/g,
to: "getPrismaConfig("
}
]
/**
* 添加 Prisma 注释
*/
function addPrismaComment(content) {
if (content.includes('使用 Prisma ORM')) return content
const lines = content.split('\n')
let commentIndex = -1
// 找到文件头注释
for (let i = 0; i < lines.length; i++) {
if (lines[i].includes('*/')) {
commentIndex = i
break
}
}
if (commentIndex > 0) {
lines.splice(commentIndex, 0, ' * 使用 Prisma ORM安全防SQL注入')
}
return lines.join('\n')
}
/**
* 处理单个文件
*/
function migrateFile(filePath) {
const fullPath = path.join(__dirname, '..', filePath)
if (!fs.existsSync(fullPath)) {
console.log(`❌ 文件不存在: ${filePath}`)
return false
}
let content = fs.readFileSync(fullPath, 'utf-8')
// 如果已经迁移过,跳过
if (content.includes('from \'@/lib/prisma\'')) {
console.log(`⏭️ 已迁移,跳过: ${filePath}`)
return false
}
// 应用替换规则
REPLACE_RULES.forEach(rule => {
content = content.replace(rule.from, rule.to)
})
// 添加注释
content = addPrismaComment(content)
// 写回文件
fs.writeFileSync(fullPath, content, 'utf-8')
console.log(`✅ 已迁移: ${filePath}`)
return true
}
/**
* 主函数
*/
function main() {
console.log('🚀 开始批量迁移到 Prisma ORM...\n')
let successCount = 0
let skipCount = 0
API_FILES.forEach(filePath => {
const result = migrateFile(filePath)
if (result) {
successCount++
} else {
skipCount++
}
})
console.log(`\n✨ 迁移完成!`)
console.log(` - 成功迁移: ${successCount} 个文件`)
console.log(` - 跳过: ${skipCount} 个文件`)
console.log(`\n⚠️ 注意批量迁移只处理简单替换复杂的SQL查询需要手动迁移`)
}
main()