CentralBackend/scripts/migrateContractPaths.js

63 lines
1.5 KiB
JavaScript

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 nextKey = `${prefix}/contract/${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 (_) {}
});