阶段性修改
This commit is contained in:
1 parent
4833f7fa6a
commit
5a92bab835
65 files changed
+346
-178
No files matched your search
@@ -8,6 +8,7 @@
|
||||
import { asString, type LegacyRows } from './load';
|
||||
import {
|
||||
HOME_COURSE_TITLE_MAP,
|
||||
OPENID_RE,
|
||||
transformArticle,
|
||||
transformBanner,
|
||||
transformCourse,
|
||||
@@ -29,7 +30,16 @@ export function buildDataset(db: LegacyRows, staticBase: string) {
|
||||
const courseIdByCode = new Map(courses.map((c, i) => [c.code, i + 1]));
|
||||
const courseIdByTitle = new Map(courses.map((c, i) => [c.title, i + 1]));
|
||||
|
||||
const users = db.用户信息.map(transformUser);
|
||||
// 过滤旧库里混入的攻击载荷:只有符合 openid 形态的才当作真实用户
|
||||
const skippedUsers: Array<{ openid: string; reason: string }> = [];
|
||||
const users = db.用户信息.flatMap((row) => {
|
||||
const openid = asString(row.OpenID);
|
||||
if (!OPENID_RE.test(openid)) {
|
||||
skippedUsers.push({ openid: openid.slice(0, 60), reason: '非法 openid 形态(疑似攻击载荷)' });
|
||||
return [];
|
||||
}
|
||||
return [transformUser(row)];
|
||||
});
|
||||
const userIdByOpenid = new Map(users.map((u, i) => [u.openid, i + 1]));
|
||||
|
||||
const skippedLessonOrphans: string[] = [];
|
||||
@@ -45,10 +55,14 @@ export function buildDataset(db: LegacyRows, staticBase: string) {
|
||||
// 权益:按 (user, course) 去重,重复的只保留第一条
|
||||
const seen = new Set<string>();
|
||||
const duplicateEntitlements: string[] = [];
|
||||
const droppedEntitlements: string[] = [];
|
||||
const entitlements = db.用户已购课程.flatMap((row) => {
|
||||
const userId = userIdByOpenid.get(asString(row.OpenID));
|
||||
const courseId = courseIdByCode.get(asString(row.课程id));
|
||||
if (!userId || !courseId) return [];
|
||||
if (!userId || !courseId) {
|
||||
droppedEntitlements.push(`${asString(row.OpenID).slice(0, 30)}::${asString(row.课程id).slice(0, 12)}`);
|
||||
return [];
|
||||
}
|
||||
const key = `${userId}::${courseId}`;
|
||||
if (seen.has(key)) {
|
||||
duplicateEntitlements.push(key);
|
||||
@@ -81,7 +95,12 @@ export function buildDataset(db: LegacyRows, staticBase: string) {
|
||||
settings: db.cloudconfig
|
||||
.map(transformSetting)
|
||||
.filter((v): v is NonNullable<typeof v> => v !== null),
|
||||
diagnostics: { skippedLessonOrphans, duplicateEntitlements, unmappedHomeCourses },
|
||||
diagnostics: {
|
||||
skippedLessonOrphans,
|
||||
duplicateEntitlements,
|
||||
unmappedHomeCourses,
|
||||
skippedUsers,
|
||||
droppedEntitlements,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user