阶段性修改
This commit is contained in:
1 parent
4833f7fa6a
commit
5a92bab835
65 files changed
+346
-178
No files matched your search
@@ -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;
|
||||
});
|
||||
Reference in new issue
Block a user