import { Global, Inject, Module, type OnApplicationShutdown } from '@nestjs/common'; import { createDb, type Db, type DbHandle } from '@mosaic/db'; export const DB_HANDLE = 'DB_HANDLE'; export const DB = 'DB'; @Global() @Module({ providers: [ { provide: DB_HANDLE, useFactory: (): DbHandle => createDb(), }, { provide: DB, useFactory: (handle: DbHandle): Db => handle.db, inject: [DB_HANDLE], }, ], exports: [DB], }) export class DatabaseModule implements OnApplicationShutdown { constructor(@Inject(DB_HANDLE) private readonly handle: DbHandle) {} async onApplicationShutdown(): Promise { await this.handle.close(); } }