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
JavaScript
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;
}
}