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.

55 lines 2 kB
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