UNPKG

@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
"use strict"; 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