UNPKG

iagate-querykit

Version:

QueryKit: lightweight TypeScript query toolkit with models, views, triggers, events, scheduler and adapters (better-sqlite3).

42 lines (41 loc) 1.41 kB
export class MultiDatabaseManager { static instance; adapters = new Map(); config; constructor(config) { this.config = config; } static getInstance(config) { if (!MultiDatabaseManager.instance && config) { MultiDatabaseManager.instance = new MultiDatabaseManager(config); } return MultiDatabaseManager.instance; } async initialize(createAdapter) { for (const [name, dbConfig] of Object.entries(this.config.databases)) { const adapter = createAdapter(dbConfig); await adapter.connect(); this.adapters.set(name, adapter); } } getAdapter(name) { const adapter = this.adapters.get(name); if (!adapter) throw new Error(`Database adapter '${name}' not found`); return adapter; } getDefaultAdapter() { return this.getAdapter(this.config.defaultDatabase); } async executeOnMultiple(databaseNames, query, params) { const results = {}; await Promise.all(databaseNames.map(async (name) => { try { const adapter = this.getAdapter(name); results[name] = await adapter.executeQuery(query, params); } catch (error) { results[name] = { data: [], metadata: { error: error.message } }; } })); return results; } }