@sentzunhat/zacatl
Version:
A modular, high-performance TypeScript microservice framework for Node.js, featuring layered architecture, dependency injection, and robust validation for building scalable APIs and distributed systems.
55 lines • 2 kB
JavaScript
import { CustomError } from '../../../../error/index.js';
import { createDatabaseAdapter } from './adapters/index.js';
export class DatabaseServer {
serviceName;
databases;
adapters = new Map();
constructor(serviceName, databases) {
this.serviceName = serviceName;
this.databases = databases;
}
async configure() {
if (this.databases.length === 0) {
return;
}
for (const database of this.databases) {
if (database.connectionString == null || database.connectionString.length === 0) {
throw new CustomError({
message: 'database connection string is not provided',
code: 500,
reason: 'database connection string not provided',
});
}
try {
const adapter = createDatabaseAdapter(database.vendor);
await adapter.connect(this.serviceName, database);
this.adapters.set(database.vendor, adapter);
}
catch (error) {
throw new CustomError({
message: `failed to configure database for service "${this.serviceName}"`,
code: 500,
reason: 'database configuration failed',
error: error,
metadata: {
database: {
vendor: database.vendor,
connectionString: database.connectionString,
},
},
});
}
}
}
getAdapter(vendor) {
return this.adapters.get(vendor);
}
getAdapters() {
return this.adapters;
}
async disconnect() {
const disconnectPromises = Array.from(this.adapters.values()).map((adapter) => adapter.disconnect?.());
await Promise.all(disconnectPromises);
}
}
//# sourceMappingURL=database-server.js.map