From b75184ec8e3436200bacdcd832e3324702553d20 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 18 Sep 2022 03:27:08 +0900 Subject: なんかもうめっちゃ変えた MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/GlobalModule.ts | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 packages/backend/src/GlobalModule.ts (limited to 'packages/backend/src/GlobalModule.ts') diff --git a/packages/backend/src/GlobalModule.ts b/packages/backend/src/GlobalModule.ts new file mode 100644 index 0000000000..dbc5c698df --- /dev/null +++ b/packages/backend/src/GlobalModule.ts @@ -0,0 +1,63 @@ +import { Global, Inject, Module } from '@nestjs/common'; +import { Redis } from 'ioredis'; +import { DataSource } from 'typeorm'; +import { createRedisConnection } from '@/redis.js'; +import { DI } from './di-symbols.js'; +import { loadConfig } from './config.js'; +import { createPostgreDataSource } from './postgre.js'; +import { RepositoryModule } from './RepositoryModule.js'; +import type { Provider, OnApplicationShutdown } from '@nestjs/common'; + +const config = loadConfig(); + +const $config: Provider = { + provide: DI.config, + useValue: config, +}; + +const $db: Provider = { + provide: DI.db, + useFactory: async () => { + const db = createPostgreDataSource(); + return await db.initialize(); + }, +}; + +const $redis: Provider = { + provide: DI.redis, + useFactory: () => { + const redisClient = createRedisConnection(); + return redisClient; + }, +}; + +const $redisSubscriber: Provider = { + provide: DI.redisSubscriber, + useFactory: () => { + const redisSubscriber = createRedisConnection(); + redisSubscriber.subscribe(config.host); + return redisSubscriber; + }, +}; + +@Global() +@Module({ + imports: [RepositoryModule], + providers: [$config, $db, $redis, $redisSubscriber], + exports: [$config, $db, $redis, $redisSubscriber, RepositoryModule], +}) +export class GlobalModule implements OnApplicationShutdown { + constructor( + @Inject(DI.db) private db: DataSource, + @Inject(DI.redis) private redisClient: Redis, + @Inject(DI.redisSubscriber) private redisSubscriber: Redis, + ) {} + + async onApplicationShutdown(signal: string): Promise { + await Promise.all([ + this.db.destroy(), + this.redisClient.disconnect(), + this.redisSubscriber.disconnect(), + ]); + } +} -- cgit v1.2.3-freya