Sfoglia il codice sorgente

chore: document blocked framing calculator migration

彭峰 1 mese fa
parent
commit
32fb828367

+ 2 - 1
docs/migration/admin-migration-status.md

@@ -48,9 +48,10 @@
 - 旧商城供应商 `Vendor/Vendor_API/VendorAdd/VendorAdd_Submit` 全部依赖未迁入的 `ZL_Shop_Vendor`:线上 Schema 与签约数据库文档均没有 `Vendor/ShopVendor/Manufacturers`。现有 `Agency` 只有机构编号/名称/负责人,`DeliveryCenter` 只有交付中心编号/负责人,都缺供应商地址、手机、传真、邮箱和状态,不能等价映射。`legacyShopVendorBlocker` 已按动作返回数据阻塞原因,未擅自新建未签约数据类或污染机构数据。
 - 旧用户附加功能中,`PointGroup/PointGroupAdd/PointGroup_API/PointGroup_Submit` 已映射到 `UserLevel`:提供帐套隔离列表、关键词搜索、现有等级别名/积分阈值/图片/备注编辑和批量删除;旧 `id` 与 Parse 保留字段冲突,因此新增等级明确 501。`VMoneyLog` 已由只读 `UserMoneyLog` 虚拟资源统一聚合 `UserExpDomP/UserSIcon/UserExpHis/UserUserPoint/UserDummyPoint/UserCredit` 六类规范化账本,支持余额/银币/经验/积分/虚拟币/信用分类型、日期、用户名与摘要筛选,不允许篡改历史流水。旧 `ThirdInfo.config` 六个提供商和密钥未迁入,现有 `ThirdPlatInfo` 是不同业务平台且没有旧 OAuth/XML 消费者;`PrizeTaskLog(Global.SignIn)` 用户签到日志与 `UserRealNameAuth` 实名申请/奖励链也全部缺失。这 6 个动作由 `legacyUserAddonBlocker` 逐项返回数或基础设施阻塞,未把 `MisSign` 工作签到或 `Profile` 零散身份字段伪装成旧审批历史。
 - 旧问答后台 11 个动作无法从目标数据库等价重建:线上 Schema 没有 `Ask/GuestAnswer`、`ZL_Ask/ZL_GuestAnswer` 历史记录或 `QueId` 问题—回答关系。`Baike` 是百科词条,`Guestbook` 是留言/回复,`GuestBar` 是论坛帖子,`DesignQuestion/DesignAnswer` 是问卷题目/答卷,都不能伪冒问答主从表。`Default/AskInfo/AskAdd/AskAdd_Submit/Ask_API/AnswerList/AnswerAdd/AnswerAdd_Submit/Answer_API` 已按数据阻塞登记;`Config/Config_Submit` 依赖已丢失的 `GuestConfig.WDOption` 问答运行时、用户组权限与积分消费者,按基础设施阻塞登记。`legacyAskBlocker` 会对每个请求返回具体原因。
+- 旧裱件计算后台 5 个动作全部依赖未迁入的 `BiaoCalcModel/BiaoCalcUserFiles`:目标 Schema 与签约数据库文档都没有裱件主记录、用户文件授权、等级或 `ExpireTime` 历史数据。现有账户会员到期时间控制整个账户权益,不等价于指定裱件用户文件授权,因此不用它伪实现到期/续期。`legacyBiaoCalcBlocker` 已对 `Default/BiaoDetail/Biao_API/UserFiles/UserFiles_API` 返回逐项数据阻塞原因。
 - 旧百科后台的主词条审查已映射到 `Baike`:`baikeEntries` 提供帐套、关键词、审核/未审核和推荐/未推荐筛选,`baikeBatch` 支持审核、取消审核、推荐和取消推荐,Angular 新增百科审核入口和只读详情。线上仅保留 1 条 `Baike` 主记录,完全没有旧 `BaikeEdit` 版本表,因此 `BKVersionList/Version_API/BKList` 及 `BK_API` 的版本删除/应用部分明确数据阻塞。`GuestConfig.BKOption` 百科创建/编辑/推荐权限与积分奖励消费者也缺失,`Config/Config_Submit` 按基础设施阻塞登记;推荐操作不伪造已发放奖励。
 - `_User`、`CommonModel`、`Node` 与 `Special` 表格已补齐当前页全选和批量工具栏,可直接批量停用/解锁/移动用户组,审核、回收、恢复、移动内容节点,回收、恢复、移动栏目,以及移动专题;翻页或重新查询会清空选择,避免误操作隐藏页记录。
-- 迁移状态页已接入从反编译基线自动生成的 1,042 项旧后台动作台账,可按模块、action、原因与状态搜索筛选;当前保守登记为 95 项已实现、63 项部分实现、156 项数据阻塞、208 项基础设施阻塞、520 项待逐项核验。生成器和 `admin-coverage:check` 会阻止台账与源码基线漂移。
+- 迁移状态页已接入从反编译基线自动生成的 1,042 项旧后台动作台账,可按模块、action、原因与状态搜索筛选;当前保守登记为 95 项已实现、63 项部分实现、161 项数据阻塞、208 项基础设施阻塞、515 项待逐项核验。生成器和 `admin-coverage:check` 会阻止台账与源码基线漂移。
 - Parse 登录只在浏览器保存当前 `sessionToken`;`masterKey` 只在部署进程中使用。
 - 云函数网关强制校验管理员身份、`company` 帐套、类白名单、字段白名单和敏感字段过滤。
 - `_Session` 不开放,`Function` 源码不开放通用查询或编辑;用户密码只允许专用重置操作。

+ 9 - 0
scripts/deploy-admin-functions.mjs

@@ -1260,6 +1260,15 @@ async function handler(request, response) {
         Config_Submit: '即使存储积分与用户组参数,目标也没有问答发布/回复/推荐运行时执行这些规则,不能伪造保存生效'
       }; if (!Object.prototype.hasOwnProperty.call(blockers, action)) fail(400, '不支持的旧问答动作'); fail(501, 'migration_blocked: ' + blockers[action]);
     }
+    if (operation === 'legacyBiaoCalcBlocker') {
+      const action = String(input.action || ''); const blockers = {
+        Default: '目标 Schema 缺少旧 BiaoCalcModel 裱件模型主表、状态与历史记录',
+        BiaoDetail: '目标无可定位的裱件详情及其 UserID 用户关系',
+        Biao_API: '目标缺少可启用、停用或删除的 BiaoCalcModel 裱件记录',
+        UserFiles: '目标 Schema 缺少旧 BiaoCalcUserFiles 用户文件主表、等级、到期时间与历史授权记录',
+        UserFiles_API: '目标无 BiaoCalcUserFiles.ExpireTime 可安全执行到期或按年月日续期;账户会员到期时间语义不等价'
+      }; if (!Object.prototype.hasOwnProperty.call(blockers, action)) fail(400, '不支持的旧裱件计算动作'); fail(501, 'migration_blocked: ' + blockers[action]);
+    }
     if (operation === 'baikeEntries') {
       const page = Math.max(1, Number(input.page) || 1); const pageSize = Math.min(100, Math.max(1, Number(input.pageSize) || 20)); const search = String(input.search || '').trim().toLowerCase(); const status = Number(input.status == null ? -100 : input.status); const elite = Number(input.elite == null ? -100 : input.elite); if (search.length > 100 || ![-100,0,1].includes(status) || ![-100,0,1].includes(elite)) fail(400, '百科搜索或状态筛选无效'); const fields = await schemaFor('Baike'); const query = new Parse.Query('Baike'); applyTenant(query, fields, context, input.companyId); query.limit(1000); let results = await query.find({ useMasterKey: true }); results = results.filter((entry) => (status === -100 || Number(entry.get('status')) === status) && (elite === -100 || Number(entry.get('elite')) === elite) && (!search || [entry.get('tittle'),entry.get('brief'),entry.get('contents'),entry.get('userName'),entry.get('classification')].some((value) => String(value || '').toLowerCase().includes(search)))); results.sort((left,right) => Number(right.get('id') || 0) - Number(left.get('id') || 0)); const total = results.length; results = results.slice((page - 1) * pageSize, page * pageSize); return response.json({ success: true, data: { className: 'Baike', page, pageSize, total, results: results.map(serializeObject) } });
     }

+ 5 - 0
scripts/generate-admin-coverage.mjs

@@ -181,6 +181,11 @@ const explicit = new Map([
   ['Content / Ask/Answer_API', ['blocked-data', '目标缺少可审核、取消审核或删除的旧问答回答记录']],
   ['Content / Ask/Config', ['blocked-infrastructure', '目标没有 GuestConfig.WDOption 问答运行时和用户组权限消费者']],
   ['Content / Ask/Config_Submit', ['blocked-infrastructure', '目标没有问答发布/回复/推荐运行时执行积分与用户组规则']],
+  ['BiaoCalc/Default', ['blocked-data', '目标 Schema 缺少旧 BiaoCalcModel 裱件模型主表、状态与历史记录']],
+  ['BiaoCalc/BiaoDetail', ['blocked-data', '目标无可定位的裱件详情及 UserID 用户关系']],
+  ['BiaoCalc/Biao_API', ['blocked-data', '目标缺少可启用、停用或删除的 BiaoCalcModel 记录']],
+  ['BiaoCalc/UserFiles', ['blocked-data', '目标 Schema 缺少 BiaoCalcUserFiles 文件授权、等级与到期时间数据']],
+  ['BiaoCalc/UserFiles_API', ['blocked-data', '目标无 BiaoCalcUserFiles.ExpireTime 可到期或续期;账户会员到期字段语义不等价']],
   ['Content / Baike/Default', ['partial', '已由 Angular 百科审核入口替代;旧默认跳转的 BaikeEdit 版本列表因数据缺失而阻塞']],
   ['Content / Baike/BKVersionList', ['blocked-data', '目标 Schema 缺少旧 BaikeEdit 版本表、待审版本内容与历史版本数据']],
   ['Content / Baike/Version_API', ['blocked-data', '目标无 BaikeEdit 版本记录,无法审核并 Apply、取消审核、驳回或删除']],

File diff suppressed because it is too large
+ 1 - 0
scripts/smoke-admin-functions.mjs


+ 5 - 0
src/app/admin/legacy-admin-coverage.generated.spec.ts

@@ -100,6 +100,11 @@ describe('legacy admin coverage inventory', () => {
     expect(byKey.get('Content / Ask/Answer_API')?.status).toBe('blocked-data');
     expect(byKey.get('Content / Ask/Config')?.status).toBe('blocked-infrastructure');
     expect(byKey.get('Content / Ask/Config_Submit')?.status).toBe('blocked-infrastructure');
+    expect(byKey.get('BiaoCalc/Default')?.status).toBe('blocked-data');
+    expect(byKey.get('BiaoCalc/BiaoDetail')?.status).toBe('blocked-data');
+    expect(byKey.get('BiaoCalc/Biao_API')?.status).toBe('blocked-data');
+    expect(byKey.get('BiaoCalc/UserFiles')?.status).toBe('blocked-data');
+    expect(byKey.get('BiaoCalc/UserFiles_API')?.status).toBe('blocked-data');
     expect(byKey.get('Content / Baike/Default')?.status).toBe('partial');
     expect(byKey.get('Content / Baike/BKVersionList')?.status).toBe('blocked-data');
     expect(byKey.get('Content / Baike/Version_API')?.status).toBe('blocked-data');

+ 10 - 10
src/app/admin/legacy-admin-coverage.generated.ts

@@ -461,36 +461,36 @@ export const LEGACY_ADMIN_COVERAGE: readonly LegacyAdminCoverageEntry[] = [
     "module": "BiaoCalc",
     "action": "Default",
     "occurrence": 1,
-    "status": "pending",
-    "reason": "尚未逐项迁移或完成等价性核验"
+    "status": "blocked-data",
+    "reason": "目标 Schema 缺少旧 BiaoCalcModel 裱件模型主表、状态与历史记录"
   },
   {
     "module": "BiaoCalc",
     "action": "BiaoDetail",
     "occurrence": 1,
-    "status": "pending",
-    "reason": "尚未逐项迁移或完成等价性核验"
+    "status": "blocked-data",
+    "reason": "目标无可定位的裱件详情及 UserID 用户关系"
   },
   {
     "module": "BiaoCalc",
     "action": "Biao_API",
     "occurrence": 1,
-    "status": "pending",
-    "reason": "尚未逐项迁移或完成等价性核验"
+    "status": "blocked-data",
+    "reason": "目标缺少可启用、停用或删除的 BiaoCalcModel 记录"
   },
   {
     "module": "BiaoCalc",
     "action": "UserFiles",
     "occurrence": 1,
-    "status": "pending",
-    "reason": "尚未逐项迁移或完成等价性核验"
+    "status": "blocked-data",
+    "reason": "目标 Schema 缺少 BiaoCalcUserFiles 文件授权、等级与到期时间数据"
   },
   {
     "module": "BiaoCalc",
     "action": "UserFiles_API",
     "occurrence": 1,
-    "status": "pending",
-    "reason": "尚未逐项迁移或完成等价性核验"
+    "status": "blocked-data",
+    "reason": "目标无 BiaoCalcUserFiles.ExpireTime 可到期或续期;账户会员到期字段语义不等价"
   },
   {
     "module": "Office / Chart",

Some files were not shown because too many files changed in this diff