feat: add migrateContractPaths script for updating contract paths in user documents
This commit is contained in:
parent
fd37a522d0
commit
1825310280
65
scripts/migrateContractPaths.js
Normal file
65
scripts/migrateContractPaths.js
Normal file
@ -0,0 +1,65 @@
|
||||
const db = require('../database/database');
|
||||
|
||||
const DRY_RUN = process.argv.includes('--dry-run');
|
||||
|
||||
async function migrate() {
|
||||
console.log(`🔧 migrateContractPaths start (dryRun=${DRY_RUN})`);
|
||||
|
||||
// Only pick contract paths missing /contract or /gdpr segment
|
||||
const rows = await db.execute(
|
||||
`SELECT id, object_storage_id, contract_type
|
||||
FROM user_documents
|
||||
WHERE object_storage_id LIKE 'contracts/%/%/%'
|
||||
AND object_storage_id NOT LIKE '%/contract/%'
|
||||
AND object_storage_id NOT LIKE '%/gdpr/%'`
|
||||
);
|
||||
|
||||
if (!rows || rows.length === 0) {
|
||||
console.log('✅ No rows to update.');
|
||||
return;
|
||||
}
|
||||
|
||||
let updated = 0;
|
||||
let skipped = 0;
|
||||
|
||||
for (const row of rows) {
|
||||
const key = String(row.object_storage_id || '');
|
||||
const match = key.match(/^(contracts\/(personal|company)\/\d+)\/([^/]+)$/i);
|
||||
if (!match) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const prefix = match[1];
|
||||
const filename = match[3];
|
||||
const targetType = (row.contract_type || '').toString().toLowerCase() === 'gdpr'
|
||||
? 'gdpr'
|
||||
: 'contract';
|
||||
const nextKey = `${prefix}/${targetType}/${filename}`;
|
||||
|
||||
if (DRY_RUN) {
|
||||
console.log(`DRY_RUN: ${row.id} ${key} -> ${nextKey}`);
|
||||
updated++;
|
||||
continue;
|
||||
}
|
||||
|
||||
await db.execute(
|
||||
`UPDATE user_documents SET object_storage_id = ? WHERE id = ?`,
|
||||
[nextKey, row.id]
|
||||
);
|
||||
updated++;
|
||||
}
|
||||
|
||||
console.log(`✅ Done. updated=${updated}, skipped=${skipped}`);
|
||||
}
|
||||
|
||||
migrate()
|
||||
.catch(err => {
|
||||
console.error('💥 migrateContractPaths error:', err);
|
||||
process.exitCode = 1;
|
||||
})
|
||||
.finally(async () => {
|
||||
try {
|
||||
await db.close();
|
||||
} catch (_) {}
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user