import { IConfig } from 'config'; import { IContext } from '@libs/types/IContext'; import { MongoClient, IDb } from '@p81-common/p81-mongo-client'; import { ApiGatewayService } from '@libs/services'; import { IRedisConfig, IRedisManager, ISwgProfileRepository, Logger } from '@libs/types/'; import RedisManager from '@libs/services/RedisManager'; import SwgProfileRepository from '@libs/repositories/SwgProfileRepository'; export default class Context implements IContext { logger: Logger; config: IConfig; db!: IDb; apiGatewayService: ApiGatewayService; redisManager!: IRedisManager; swgProfileRepository!: ISwgProfileRepository; constructor(config: IConfig, logger: Logger) { this.config = config; this.logger = logger; this.apiGatewayService = new ApiGatewayService(config.get('apiGateway')); } async initContext(): Promise { const url: string = this.config.get('mongoDb.url'); const mongoClient = new MongoClient(url, {}); await mongoClient.connect(); this.db = mongoClient.db(); const redisConfig: IRedisConfig = this.config.get('redis'); this.redisManager = new RedisManager(redisConfig, { logger: this.logger }); this.swgProfileRepository = new SwgProfileRepository( this.config, this.db, this.redisManager, this.logger, ); } }