@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.
59 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseServer = void 0;
const error_1 = require("../../../../error/index.js");
const adapters_1 = require("./adapters");
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 error_1.CustomError({
message: 'database connection string is not provided',
code: 500,
reason: 'database connection string not provided',
});
}
try {
const adapter = (0, adapters_1.createDatabaseAdapter)(database.vendor);
await adapter.connect(this.serviceName, database);
this.adapters.set(database.vendor, adapter);
}
catch (error) {
throw new error_1.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);
}
}
exports.DatabaseServer = DatabaseServer;
//# sourceMappingURL=database-server.js.map