阶段性修改

This commit is contained in:
tianmo committed 2026-09-29 19:34:24 +08:00
1 parent 4833f7fa6a
commit 5a92bab835
65 files changed
+346 -178

No files matched your search

+22 -10
View File
@@ -7,8 +7,12 @@
* 用法:pnpm legacy:check [--dump <path>]
*/
import { asString, loadLegacyDump, DEFAULT_DUMP_PATH } from './load';
import { asString } from './load';
import { COURSE_CODE_RE } from './columns';
import { ensureEnvLoaded, loadLegacyFromArgs } from './source';
import { OPENID_RE } from './transform';
ensureEnvLoaded();
type Issue = { level: 'BLOCKER' | 'WARN'; message: string };
@@ -27,13 +31,9 @@ function duplicates<T>(items: T[]): Map<string, T[]> {
return new Map([...count(items)].filter(([, v]) => v.length > 1));
}
function main(): void {
const dumpPath = process.argv.includes('--dump')
? process.argv[process.argv.indexOf('--dump') + 1]!
: DEFAULT_DUMP_PATH;
console.log(`旧库体检\n数据源: ${dumpPath}\n`);
const db = loadLegacyDump(dumpPath);
async function main(): Promise<void> {
const { rows: db, label } = await loadLegacyFromArgs(process.argv);
console.log(`旧库体检\n数据源: ${label}\n`);
const issues: Issue[] = [];
const line = (s: string): void => console.log(s);
@@ -51,12 +51,22 @@ function main(): void {
const openids = users.map((r) => asString(r.OpenID));
const emptyOpenid = openids.filter((v) => v === '').length;
const dupOpenid = duplicates(openids);
const validOpenids = openids.filter((v) => OPENID_RE.test(v));
const invalidOpenids = openids.length - validOpenids.length;
line(` 用户数 ${users.length}`);
line(` 合法 openid 形态 ${validOpenids.length}`);
line(` 异常值(迁移时过滤) ${invalidOpenids}`);
line(` 空 openid ${emptyOpenid}`);
line(` 重复 openid ${dupOpenid.size}`);
line(` 已设置昵称 ${users.filter((r) => asString(r.用户名) !== '').length}`);
line(` 管理员 ${users.filter((r) => asString(r.是否管理员) === '1').length}`);
if (emptyOpenid > 0) issues.push({ level: 'BLOCKER', message: `存在 ${emptyOpenid} 条空 openid,违反 users.openid NOT NULL` });
if (invalidOpenids > 0) {
issues.push({
level: 'WARN',
message: `${invalidOpenids} 条记录不是合法 openid(旧接口无校验,多为平台安全扫描留下的探针),迁移时会自动过滤,不影响真实用户`,
});
}
if (dupOpenid.size > 0) {
issues.push({ level: 'BLOCKER', message: `存在 ${dupOpenid.size} 个重复 openid,违反 users.openid UNIQUE` });
for (const [k, v] of dupOpenid) line(` ${k} × ${v.length}`);
@@ -125,5 +135,7 @@ function main(): void {
for (const w of warns) line(` [${w.level}] ${w.message}`);
}
main();
main().catch((err: unknown) => {
console.error(`\n❌ 体检中止:${err instanceof Error ? err.message : String(err)}`);
process.exitCode = 1;
});