verify-conservation.mjs 1023 Bytes
#!/usr/bin/env node
/**
 * 对账(SDD「积分清算」):① 已关闭托管的发放明细之和 = 托管金额;② held 托管都对应未结束的任务,
 * 未结束的任务都有 held 托管;③ 每笔 voko 流水的 ref 都能找到业务记录。
 * 任一不满足即失败并打印数据 id。可单独运行;每个场景脚本末尾与 worker 的每日 job 调用同一个函数。
 */
import { fileURLToPath } from 'node:url'
import { createDb } from '@drama/db'
import { verifyConservation } from '@voko/clearing'

import { databaseUrlFromArgs } from '../../../src/db/env-file.js'

if (process.argv[1] === fileURLToPath(import.meta.url)) {
  const db = createDb({ url: databaseUrlFromArgs(process.argv.slice(2)), pool: { min: 1, max: 1 } })
  try {
    const problems = await verifyConservation(db)
    console.log(JSON.stringify({ status: problems.length === 0 ? 'PASS' : 'FAIL', problems }, null, 2))
    if (problems.length > 0) process.exitCode = 1
  } finally {
    await db.destroy()
  }
}