mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-07-11 08:43:48 +00:00
* 🔧 refactor: Centralize Collection Existence Checks for Permissions Migration * Replace individual collection existence checks with a unified function `ensureRequiredCollectionsExist` in the database utility module. * Update migration scripts for agents and prompts to utilize the new function, ensuring all required collections are verified for existence in a single call. * Remove redundant collection existence logic from migration files, improving code maintainability and clarity. * chore: import order in migration scripts * 🔧 test: Update Token Test Cases for Realistic Scenarios * Changed email in test data to 'user1-alt@example.com' for a more realistic scenario. * Clarified expectation comment for token retrieval to indicate it finds the only matching token based on criteria.
54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
import { logger } from '@librechat/data-schemas';
|
|
import type { mongo } from 'mongoose';
|
|
|
|
/**
|
|
* Ensures that a collection exists in the database.
|
|
* For DocumentDB compatibility, it tries multiple approaches.
|
|
* @param db - The MongoDB database instance
|
|
* @param collectionName - The name of the collection to ensure exists
|
|
*/
|
|
export async function ensureCollectionExists(db: mongo.Db, collectionName: string): Promise<void> {
|
|
try {
|
|
const collections = await db.listCollections({ name: collectionName }).toArray();
|
|
if (collections.length === 0) {
|
|
await db.createCollection(collectionName);
|
|
logger.info(`Created collection: ${collectionName}`);
|
|
} else {
|
|
logger.debug(`Collection already exists: ${collectionName}`);
|
|
}
|
|
} catch (error) {
|
|
logger.error(`Failed to check/create "${collectionName}" collection:`, error);
|
|
// If listCollections fails, try alternative approach
|
|
try {
|
|
// Try to access the collection directly - this will create it in MongoDB if it doesn't exist
|
|
await db.collection(collectionName).findOne({}, { projection: { _id: 1 } });
|
|
} catch (createError) {
|
|
logger.error(`Could not ensure collection ${collectionName} exists:`, createError);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ensures that all required collections exist for the permission system.
|
|
* This includes aclentries, groups, accessroles, and any other collections
|
|
* needed for migrations and permission checks.
|
|
* @param db - The MongoDB database instance
|
|
*/
|
|
export async function ensureRequiredCollectionsExist(db: mongo.Db): Promise<void> {
|
|
const requiredCollections = [
|
|
'aclentries', // ACL permission entries
|
|
'groups', // User groups
|
|
'accessroles', // Access roles for permissions
|
|
'agents', // Agents collection
|
|
'promptgroups', // Prompt groups collection
|
|
'projects', // Projects collection
|
|
];
|
|
|
|
logger.debug('Ensuring required collections exist for permission system');
|
|
|
|
for (const collectionName of requiredCollections) {
|
|
await ensureCollectionExists(db, collectionName);
|
|
}
|
|
|
|
logger.debug('All required collections have been checked/created');
|
|
}
|