UNPKG

streamby-core

Version:

StreamBy middleware framework for media storage management

91 lines (90 loc) 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nosqlAdapter = exports.createNoSQLRawExportCollection = exports.createNoSQLExportCollection = exports.ensureCollectionsExist = void 0; const mongodb_1 = require("mongodb"); const ensureCollectionsExist = async (client) => { const db = client.db(); // Ensure 'projects' collection exists and define its schema implicitly // Schema: { _id: ObjectId, name: string, description: string, dbType: string, createdAt: Date, updatedAt: Date, members: [{ userId: string, archived: boolean }] } const projectsCollection = db.collection('projects'); await projectsCollection.findOne({}); // Attempt to find one to ensure collection is created if it doesn't exist console.log('✅ "projects" collection ensured to exist.'); // Ensure 'exports' collection exists and define its schema implicitly // Schema: { _id: ObjectId, projectId: ObjectId, status: string, filePath: string, createdAt: Date, updatedAt: Date } const exportsCollection = db.collection('exports'); await exportsCollection.findOne({}); // Attempt to find one to ensure collection is created if it doesn't exist console.log('✅ "exports" collection ensured to exist.'); }; exports.ensureCollectionsExist = ensureCollectionsExist; const createNoSQLExportCollection = async (connection, projectId, exportName, fields) => { const db = connection.db(); const slug = exportName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); const collectionName = `export_${projectId}_${slug}`; // Create the collection implicitly by inserting the metadata document const metadataDocument = { __metadata: { fields, createdAt: new Date(), updatedAt: new Date(), }, }; await db.collection(collectionName).insertOne(metadataDocument); console.log(`✅ Collection '${collectionName}' created with metadata.`); return { collectionName, exportId: collectionName }; }; exports.createNoSQLExportCollection = createNoSQLExportCollection; const createNoSQLRawExportCollection = async (connection, projectId, exportName, method, jsonData) => { const db = connection.db(); const slug = exportName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); const collectionName = `raw_export_${projectId}_${slug}`; // Insert the raw JSON data directly into the new collection const result = await db.collection(collectionName).insertOne({ json: jsonData, name: exportName, method, collectionName, createdAt: new Date(), updatedAt: new Date() }); console.log(`✅ Raw collection '${collectionName}' created with provided JSON data.`); return { collectionName, exportId: result.insertedId.toHexString() }; }; exports.createNoSQLRawExportCollection = createNoSQLRawExportCollection; exports.nosqlAdapter = { find: async (connection, tableName, filter) => { const db = connection.db(); const result = await db.collection(tableName).find(filter).toArray(); return result; }, findOne: async (connection, tableName, filter) => { const db = connection.db(); let processedFilter = { ...filter }; if (processedFilter._id && typeof processedFilter._id === 'string') { processedFilter._id = new mongodb_1.ObjectId(processedFilter._id); } const result = await db.collection(tableName).findOne(processedFilter); return result; }, create: async (connection, tableName, data) => { const db = connection.db(); const result = await db.collection(tableName).insertOne(data); return { ...data, _id: result.insertedId }; }, update: async (connection, tableName, filter, data) => { const db = connection.db(); let processedFilter = { ...filter }; if (processedFilter._id && typeof processedFilter._id === 'string') { processedFilter._id = new mongodb_1.ObjectId(processedFilter._id); } // Check if the update data contains MongoDB update operators (e.g., $set, $push) const isUpdateOperator = Object.keys(data).some(key => key.startsWith('$')); const updateDocument = isUpdateOperator ? data : { $set: data }; const result = await db.collection(tableName).findOneAndUpdate(processedFilter, updateDocument, { returnDocument: 'after' }); if (!result) { return null; } return result; }, delete: async (connection, tableName, filter) => { const db = connection.db(); let processedFilter = { ...filter }; if (processedFilter._id && typeof processedFilter._id === 'string') { processedFilter._id = new mongodb_1.ObjectId(processedFilter._id); } const result = await db.collection(tableName).deleteMany(processedFilter); return result.deletedCount; }, };