后端迁移开发脚本
This commit is contained in:
@@ -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}`)
|
||||
}
|
||||
Reference in New Issue
Block a user