Files
atlas-seller-kit/apps/api/src/database/database.module.ts
T
2026-09-03 16:04:44 +08:00

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();
}
}