/** * Import Documents from Export File * * Imports curated documents into production database * Handles upsert (insert or update) based on slug * * Usage: node scripts/import-from-export.js */ const { MongoClient } = require('mongodb'); const fs = require('fs').promises; const PROD_URI = 'mongodb://localhost:27017'; const PROD_DB = 'tractatus_production'; async function run() { const args = process.argv.slice(2); if (args.length === 0) { console.error('Usage: node scripts/import-from-export.js '); process.exit(1); } const exportFile = args[0]; try { // Read export file const content = await fs.readFile(exportFile, 'utf8'); const exportData = JSON.parse(content); console.log('═══════════════════════════════════════════════════════════'); console.log(' IMPORTING DOCUMENTS TO PRODUCTION'); console.log('═══════════════════════════════════════════════════════════\n'); console.log(` Source: ${exportFile}`); console.log(` Exported: ${exportData.exported_at}`); console.log(` Documents: ${exportData.total_documents}\n`); const client = new MongoClient(PROD_URI); await client.connect(); const db = client.db(PROD_DB); const collection = db.collection('documents'); const stats = { inserted: 0, updated: 0, errors: [] }; for (const doc of exportData.documents) { try { const result = await collection.replaceOne( { slug: doc.slug }, doc, { upsert: true } ); if (result.upsertedCount > 0) { console.log(` ✓ Inserted: ${doc.title}`); stats.inserted++; } else if (result.modifiedCount > 0) { console.log(` ✓ Updated: ${doc.title}`); stats.updated++; } else { console.log(` - No change: ${doc.title}`); } } catch (error) { console.error(` ✗ Error importing ${doc.slug}: ${error.message}`); stats.errors.push({ slug: doc.slug, error: error.message }); } } console.log('\n═══════════════════════════════════════════════════════════'); console.log(' IMPORT SUMMARY'); console.log('═══════════════════════════════════════════════════════════\n'); console.log(` ✅ Inserted: ${stats.inserted}`); console.log(` ✅ Updated: ${stats.updated}`); console.log(` ✗ Errors: ${stats.errors.length}\n`); if (stats.errors.length > 0) { console.log(' Errors:'); stats.errors.forEach(e => console.log(` - ${e.slug}: ${e.error}`)); console.log(''); } console.log(' Next steps:'); console.log(' 1. Verify documents in production database'); console.log(' 2. Restart production server to pick up changes'); console.log(' 3. Test https://agenticgovernance.digital/docs.html\n'); await client.close(); process.exit(0); } catch (error) { console.error('Import error:', error); process.exit(1); } } run();