99 lines
2.4 KiB
JavaScript
99 lines
2.4 KiB
JavaScript
#!/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(`
|
|
用法:
|
|
node scripts/cleanup-dev-data.js [--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}`)
|
|
}
|