后端迁移开发脚本

This commit is contained in:
yml
2026-05-21 17:37:31 +08:00
parent 78e9d1d5c5
commit 3a2f89e233
5 changed files with 23 additions and 10 deletions
+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env node
import process from 'node:process'
import { closeDb, query } from '../src/db/client.js'
import { runtimeConfig } from '../src/config/runtime.js'
const RESET_TABLES = [
'message_deliveries',
'tencent_browser_contexts',
'task_events',
'claim_tokens',
'task_inventory_bindings',
'fulfillment_tasks',
'order_items',
'orders',
'webhook_events',
'inventory_items',
]
const options = parseArgs(process.argv.slice(2))
if (options.help) {
printHelp()
process.exit(0)
}
try {
const counts = await collectCounts()
printSummary(counts)
if (!options.apply) {
console.log('\n当前为预览模式。确认后追加 `--apply` 执行清库。')
process.exit(0)
}
await query(`TRUNCATE TABLE ${RESET_TABLES.join(', ')} RESTART IDENTITY CASCADE`)
console.log('\n已清空测试业务数据。')
console.log('保留内容:fulfillment profiles/bindings、admin users、配置文件。')
} catch (error) {
console.error('\n清理失败:', error instanceof Error ? error.message : String(error || '未知错误'))
process.exitCode = 1
} finally {
await closeDb()
}
async function collectCounts() {
const output = []
for (const tableName of RESET_TABLES) {
const result = await query(`SELECT COUNT(*)::int AS total FROM ${tableName}`)
output.push({
tableName,
total: Number(result.rows[0]?.total || 0),
})
}
return output
}
function parseArgs(argv) {
return {
apply: argv.includes('--apply'),
help: argv.includes('-h') || argv.includes('--help'),
}
}
function printHelp() {
console.log(`
用法:
npm run cleanup:dev-data -- [--apply]
说明:
基于当前 PostgreSQL fulfillment schema 清空测试业务数据。
默认只预览各表记录数,追加 --apply 后执行 TRUNCATE。
会清空:
${RESET_TABLES.join('\n ')}
会保留:
fulfillment_profiles / fulfillment_profile_requirements / sku_fulfillment_bindings
admin_users / admin_audit_logs
本地配置文件
数据库连接: ${String(runtimeConfig.database?.url || '').trim() || '(未配置 DATABASE_URL)'}
`.trim())
}
function printSummary(counts) {
const totalRows = counts.reduce((sum, item) => sum + item.total, 0)
console.log('准备清理当前测试业务数据:')
for (const item of counts) {
console.log(`- ${item.tableName}: ${item.total}`)
}
console.log(`- total: ${totalRows}`)
}