Files
waooplus/scripts/migrations/migrate-gateway-route-openai-compat.ts
2026-03-08 17:10:06 +08:00

81 lines
2.0 KiB
TypeScript

import { prisma } from '@/lib/prisma'
import { migrateGatewayRoutePayload } from '@/lib/migrations/gateway-route-openai-compat'
const APPLY = process.argv.includes('--apply')
type PreferenceRow = {
id: string
userId: string
customProviders: string | null
}
type MigrationSummary = {
mode: 'dry-run' | 'apply'
scanned: number
updatedRows: number
migratedProviders: number
routeLitellmToOpenaiCompat: number
routeForcedOfficial: number
geminiApiModeCorrected: number
skippedInvalidRows: number
}
async function main() {
const summary: MigrationSummary = {
mode: APPLY ? 'apply' : 'dry-run',
scanned: 0,
updatedRows: 0,
migratedProviders: 0,
routeLitellmToOpenaiCompat: 0,
routeForcedOfficial: 0,
geminiApiModeCorrected: 0,
skippedInvalidRows: 0,
}
const rows = await prisma.userPreference.findMany({
select: {
id: true,
userId: true,
customProviders: true,
},
}) as PreferenceRow[]
summary.scanned = rows.length
for (const row of rows) {
const result = migrateGatewayRoutePayload(row.customProviders)
if (result.status === 'invalid') {
summary.skippedInvalidRows += 1
continue
}
summary.migratedProviders += result.summary.providersChanged
summary.routeLitellmToOpenaiCompat += result.summary.routeLitellmToOpenaiCompat
summary.routeForcedOfficial += result.summary.routeForcedOfficial
summary.geminiApiModeCorrected += result.summary.geminiApiModeCorrected
if (!result.changed) continue
summary.updatedRows += 1
if (APPLY) {
await prisma.userPreference.update({
where: { id: row.id },
data: {
customProviders: result.nextRaw ?? null,
},
})
}
}
console.log(JSON.stringify(summary, null, 2))
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (error: unknown) => {
console.error('[migrate-gateway-route-openai-compat] failed', error)
await prisma.$disconnect()
process.exit(1)
})