kt-template-online-api/src/apps/napcat-webui-gateway/napcat-webui-gateway.module.ts

60 lines
2.2 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RedisModule } from '@nestjs-modules/ioredis';
import { LoggerModule } from 'nestjs-pino';
import { createPinoLoggerParams } from '@/common';
import { NapcatWebuiGatewaySessionService } from './application/napcat-webui-gateway-session.service';
import { NapcatWebuiGatewayConfigService } from './config/napcat-webui-gateway-config.service';
import { NAPCAT_WEBUI_GATEWAY_SESSION_STORE } from './domain/napcat-webui-gateway.types';
import { NapcatWebuiGatewayRedisStore } from './infrastructure/session/napcat-webui-gateway-redis.store';
import { NapcatWebuiGatewayTicketService } from './infrastructure/session/napcat-webui-gateway-ticket.service';
import { InternalSessionController } from './presentation/internal-session.controller';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.env.${process.env.NODE_ENV || 'development'}`,
}),
LoggerModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
/**
* Builds pino logger options from the shared API logging config.
* @param configService - Nest ConfigService dependency.
* @returns LoggerModule options.
*/
useFactory: (configService: ConfigService) =>
createPinoLoggerParams(configService),
}),
RedisModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
/**
* Builds the Gateway Redis module options.
* @param configService - Nest ConfigService dependency.
* @returns @nestjs-modules/ioredis single-connection options.
*/
useFactory: (configService: ConfigService) => {
const config = new NapcatWebuiGatewayConfigService(configService);
return {
type: 'single' as const,
url: config.redisUrl(),
};
},
}),
],
controllers: [InternalSessionController],
providers: [
NapcatWebuiGatewayConfigService,
NapcatWebuiGatewaySessionService,
NapcatWebuiGatewayRedisStore,
NapcatWebuiGatewayTicketService,
{
provide: NAPCAT_WEBUI_GATEWAY_SESSION_STORE,
useExisting: NapcatWebuiGatewayRedisStore,
},
],
})
export class NapcatWebuiGatewayModule {}