diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-09-18 03:27:08 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-18 03:27:08 +0900 |
| commit | b75184ec8e3436200bacdcd832e3324702553d20 (patch) | |
| tree | 8b7e316f29e95df921db57289c8b8da476d18f07 /packages/backend/src/GlobalModule.ts | |
| parent | Update ROADMAP.md (diff) | |
| download | sharkey-b75184ec8e3436200bacdcd832e3324702553d20.tar.gz sharkey-b75184ec8e3436200bacdcd832e3324702553d20.tar.bz2 sharkey-b75184ec8e3436200bacdcd832e3324702553d20.zip | |
なんかもうめっちゃ変えた
Diffstat (limited to 'packages/backend/src/GlobalModule.ts')
| -rw-r--r-- | packages/backend/src/GlobalModule.ts | 63 |
1 files changed, 63 insertions, 0 deletions
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<void> { + await Promise.all([ + this.db.destroy(), + this.redisClient.disconnect(), + this.redisSubscriber.disconnect(), + ]); + } +} |