Integrate Oudelaa backend features, security, tests, and deployment updates
هذا الالتزام موجود في:
58
scripts/sync-atlas-search-indexes.js
Normal file
58
scripts/sync-atlas-search-indexes.js
Normal file
@@ -0,0 +1,58 @@
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const mongoose = require('mongoose');
|
||||
|
||||
const projectRoot = path.resolve(__dirname, '..');
|
||||
require('dotenv').config({ path: path.join(projectRoot, '.env') });
|
||||
|
||||
const indexSpecs = [
|
||||
{
|
||||
collection: 'users',
|
||||
name: process.env.SEARCH_ATLAS_USER_INDEX || 'users_search',
|
||||
definitionPath: path.join(projectRoot, 'ops', 'atlas-search', 'users_search.json'),
|
||||
},
|
||||
{
|
||||
collection: 'posts',
|
||||
name: process.env.SEARCH_ATLAS_POST_INDEX || 'posts_search',
|
||||
definitionPath: path.join(projectRoot, 'ops', 'atlas-search', 'posts_search.json'),
|
||||
},
|
||||
];
|
||||
|
||||
async function syncIndex(database, spec) {
|
||||
const collection = database.collection(spec.collection);
|
||||
const definition = JSON.parse(fs.readFileSync(spec.definitionPath, 'utf8'));
|
||||
const existing = await collection.listSearchIndexes(spec.name).toArray();
|
||||
|
||||
if (existing.length) {
|
||||
await collection.updateSearchIndex(spec.name, definition);
|
||||
process.stdout.write(`Updated Atlas Search index ${spec.name} on ${spec.collection}\n`);
|
||||
return;
|
||||
}
|
||||
|
||||
await collection.createSearchIndex({ name: spec.name, definition });
|
||||
process.stdout.write(`Created Atlas Search index ${spec.name} on ${spec.collection}\n`);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const uri = process.env.MONGODB_URI;
|
||||
if (!uri) {
|
||||
throw new Error('MONGODB_URI is required');
|
||||
}
|
||||
|
||||
await mongoose.connect(uri, { serverSelectionTimeoutMS: 15_000 });
|
||||
try {
|
||||
if (!mongoose.connection.db) {
|
||||
throw new Error('MongoDB connection has no selected database');
|
||||
}
|
||||
for (const spec of indexSpecs) {
|
||||
await syncIndex(mongoose.connection.db, spec);
|
||||
}
|
||||
} finally {
|
||||
await mongoose.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
المرجع في مشكلة جديدة
حظر مستخدم