import fs from 'node:fs'; import assert from 'node:assert/strict'; import {login,call} from './role-permissions-live.mjs'; const dir='reports/bridge-model-match-20260914',s=await login('root'); const api=async(p,data,method)=>{const r=await call('tran/v1/'+p,s.accessToken,data,method);assert.equal(r.status,200,`${p}: ${r.message}`);return r.data;}; const cleanup=JSON.parse(fs.readFileSync('E:/work/edit_3d/.codex-tmp/bridge-model-match-cleanup-20260914/result.json','utf8')); assert.equal(cleanup.result,'PASS'); const fixtures=fs.readdirSync(dir).filter(f=>f.startsWith('fixtures-')).flatMap(f=>JSON.parse(fs.readFileSync(dir+'/'+f))); const ids=[...new Set(fixtures.map(f=>Number(f.projectId)))].sort((a,b)=>a-b); assert.deepEqual(ids,[453,454,455]); for(const id of ids){ let detail=await api('content/projects/'+id); assert.ok(detail.project.name.startsWith('三维验收·')); detail=await api(`content/projects/${id}/review`,{version:detail.project.version,action:'REVOKE',comment:'模型匹配验收完成,清理本次临时项目'}); await api(`content/projects/${id}?version=${detail.project.version}`,undefined,'DELETE'); } cleanup.softDeletedContentProjects=ids; fs.writeFileSync(dir+'/cleanup.json',JSON.stringify(cleanup,null,2)); console.log(JSON.stringify(cleanup));