27 lines
963 B
TypeScript
27 lines
963 B
TypeScript
import { Global, Inject, Module, OnModuleDestroy } from '@nestjs/common';
|
|
import { createApplicationDatabase, type Database } from '@atlas/database';
|
|
import { APP_CONFIG, type AppConfig } from '../config/app-config.module.js';
|
|
|
|
export const DATABASE = Symbol('DATABASE');
|
|
|
|
@Global()
|
|
@Module({
|
|
providers: [
|
|
{
|
|
provide: DATABASE,
|
|
inject: [APP_CONFIG],
|
|
// 业务代码只能拿到受限应用连接,迁移连接串绝不注入 API 容器。
|
|
useFactory: (config: AppConfig): Database =>
|
|
createApplicationDatabase(config.DATABASE_URL),
|
|
},
|
|
],
|
|
exports: [DATABASE],
|
|
})
|
|
export class DatabaseModule implements OnModuleDestroy {
|
|
public constructor(@Inject(DATABASE) private readonly database: Database) {}
|
|
public async onModuleDestroy() {
|
|
// Nest 关闭时主动释放连接池,避免测试和热重启遗留连接。
|
|
await this.database.close();
|
|
}
|
|
}
|