diff --git a/src/app.module.ts b/src/app.module.ts index 4828580b..cd8a602e 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,16 +1,8 @@ import { Module } from '@nestjs/common'; import { LanguageModule } from './languages/language.module'; import { SharedModule } from './shared/shared.module'; -import { ConfigModule } from '@nestjs/config'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { dataSourceConfig } from './shared/infrastructure/persistence/typeOrm/dataSource'; @Module({ - imports: [ - ConfigModule.forRoot({ isGlobal: true }), - TypeOrmModule.forRoot(dataSourceConfig), - SharedModule, - LanguageModule, - ], + imports: [SharedModule, LanguageModule], }) export class AppModule {} diff --git a/src/languages/infrastructure/persistence/mongo/readLayer/mongoFindSuggestionsTermReadLayer.ts b/src/languages/infrastructure/persistence/mongo/readLayer/mongoFindSuggestionsTermReadLayer.ts index 8622cdb6..73858558 100644 --- a/src/languages/infrastructure/persistence/mongo/readLayer/mongoFindSuggestionsTermReadLayer.ts +++ b/src/languages/infrastructure/persistence/mongo/readLayer/mongoFindSuggestionsTermReadLayer.ts @@ -5,13 +5,13 @@ import UserRepository, { USER_REPOSITORY } from '@src/languages/domain/user/user import { Inject } from '@src/shared/domain/injector/inject.decorator'; import UserFinder from '@src/languages/domain/user/userFinder'; import { Document } from 'mongodb'; -import MongoConnection from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; +import MongoConnection, { MONGO_CLIENT } from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; export default class MongoFindSuggestionsTermReadLayer implements FindSuggestionsTermReadLayer { private readonly userFinder: UserFinder; constructor( - @Inject('MONGO_CLIENT') private readonly mongo: MongoConnection, + @Inject(MONGO_CLIENT) private readonly mongo: MongoConnection, @Inject(USER_REPOSITORY) userRepository: UserRepository, ) { this.userFinder = new UserFinder(userRepository); diff --git a/src/languages/infrastructure/persistence/mongo/readLayer/mongoSearchTermViewReadLayer.ts b/src/languages/infrastructure/persistence/mongo/readLayer/mongoSearchTermViewReadLayer.ts index 873ea70e..c0da0f05 100644 --- a/src/languages/infrastructure/persistence/mongo/readLayer/mongoSearchTermViewReadLayer.ts +++ b/src/languages/infrastructure/persistence/mongo/readLayer/mongoSearchTermViewReadLayer.ts @@ -6,11 +6,11 @@ import SearchTermViewReadLayer, { import { Document } from 'mongodb'; import { SortDirection } from 'typeorm'; import { Inject } from '@src/shared/domain/injector/inject.decorator'; -import MongoConnection from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; +import MongoConnection, { MONGO_CLIENT } from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; @Injectable() export default class MongoSearchTermViewReadLayer implements SearchTermViewReadLayer { - constructor(@Inject('MONGO_CLIENT') private readonly mongo: MongoConnection) {} + constructor(@Inject(MONGO_CLIENT) private readonly mongo: MongoConnection) {} async search(criteria: TermCriteriaParams): Promise { let result = []; diff --git a/src/languages/infrastructure/persistence/mongo/service/mongoTermViewSaver.ts b/src/languages/infrastructure/persistence/mongo/service/mongoTermViewSaver.ts index d0ea6c94..db6c0c32 100644 --- a/src/languages/infrastructure/persistence/mongo/service/mongoTermViewSaver.ts +++ b/src/languages/infrastructure/persistence/mongo/service/mongoTermViewSaver.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import TermViewSaver from '@src/languages/application/term/projection/create/termViewSaver'; import { Inject } from '@src/shared/domain/injector/inject.decorator'; -import MongoConnection from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; +import MongoConnection, { MONGO_CLIENT } from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; import { TermView } from '@src/languages/application/term/viewModel/termView'; @Injectable() export default class MongoTermViewSaver implements TermViewSaver { - constructor(@Inject('MONGO_CLIENT') private readonly mongo: MongoConnection) {} + constructor(@Inject(MONGO_CLIENT) private readonly mongo: MongoConnection) {} async save(termView: TermView): Promise { const session = this.mongo.session; diff --git a/src/languages/language.module.ts b/src/languages/language.module.ts index 2068f148..068888b8 100644 --- a/src/languages/language.module.ts +++ b/src/languages/language.module.ts @@ -1,6 +1,6 @@ import { Module, OnApplicationBootstrap } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; import { controllers } from '@src/languages/_dependencyInjection/controllers'; -import { services } from '@src/shared/_dependencyInjection/services'; import { repositories } from '@src/languages/_dependencyInjection/repositories'; import { commands } from '@src/languages/_dependencyInjection/commandHandlers'; import { queries } from '@src/languages/_dependencyInjection/queryHandlers'; @@ -9,23 +9,13 @@ import { projections } from '@src/languages/_dependencyInjection/projectionHandl import { readLayers } from '@src/languages/_dependencyInjection/readLayers'; import { services as LanguageServices } from '@src/languages/_dependencyInjection/services'; import NestProjectionBus from '@src/shared/infrastructure/bus/nestProjectionBus'; -import { TypeOrmModule } from '@nestjs/typeorm'; import { entitySchemas } from '@src/shared/_dependencyInjection/entitySchemas'; @Module({ imports: [TypeOrmModule.forFeature(entitySchemas)], exports: [TypeOrmModule], controllers: [...controllers], - providers: [ - ...services, - ...commands, - ...queries, - ...events, - ...projections, - ...repositories, - ...readLayers, - ...LanguageServices, - ], + providers: [...commands, ...queries, ...events, ...projections, ...repositories, ...readLayers, ...LanguageServices], }) export class LanguageModule implements OnApplicationBootstrap { constructor(private readonly projectionBus: NestProjectionBus) {} diff --git a/src/shared/_dependencyInjection/services.ts b/src/shared/_dependencyInjection/services.ts index 15ae5d3f..80639794 100644 --- a/src/shared/_dependencyInjection/services.ts +++ b/src/shared/_dependencyInjection/services.ts @@ -18,7 +18,7 @@ import NestProjectionBus from '@src/shared/infrastructure/bus/nestProjectionBus' import { EVENT_STORE_REPOSITORY } from '@src/shared/domain/eventStore/eventStoreRepository'; import MongoEventStoreRepository from '@src/shared/infrastructure/persistence/mongo/repositories/mongoEventStoreRepository'; import { PersistDomainEventsSubscriber } from '@src/shared/infrastructure/subscribers/persistDomainEventsSubscriber'; -import MongoConnection from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; +import MongoConnection, { MONGO_CLIENT } from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; import { TypeOrmTransactionalEntityManager } from '@src/shared/infrastructure/persistence/typeOrm/typeOrmTransactionalEntityManager'; import TypeOrmTransactionalDecorator from '@src/shared/infrastructure/persistence/typeOrm/typeOrmTransactionalDecorator'; @@ -29,7 +29,7 @@ export const services = [ TypeOrmTransactionalEntityManager, TypeOrmTransactionalDecorator, { - provide: 'MONGO_CLIENT', + provide: MONGO_CLIENT, useFactory: async () => { return await MongoConnection.getInstance(); }, diff --git a/src/shared/infrastructure/persistence/mongo/mongoConnection.ts b/src/shared/infrastructure/persistence/mongo/mongoConnection.ts index 9a447d87..ee2c4a13 100644 --- a/src/shared/infrastructure/persistence/mongo/mongoConnection.ts +++ b/src/shared/infrastructure/persistence/mongo/mongoConnection.ts @@ -31,3 +31,5 @@ export default class MongoConnection { this.db = this.client.db(process.env.MONGO_DB_DATABASE); } } + +export const MONGO_CLIENT = Symbol('MONGO_CLIENT'); diff --git a/src/shared/infrastructure/persistence/mongo/repositories/mongoEventStoreRepository.ts b/src/shared/infrastructure/persistence/mongo/repositories/mongoEventStoreRepository.ts index 764396f6..01d38a8b 100644 --- a/src/shared/infrastructure/persistence/mongo/repositories/mongoEventStoreRepository.ts +++ b/src/shared/infrastructure/persistence/mongo/repositories/mongoEventStoreRepository.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { DomainEvent } from '@src/shared/domain/bus/eventBus/domainEvent'; import { EventStoreRepository } from '@src/shared/domain/eventStore/eventStoreRepository'; -import MongoConnection from '../mongoConnection'; +import MongoConnection, { MONGO_CLIENT } from '../mongoConnection'; import { Inject } from '@src/shared/domain/injector/inject.decorator'; @Injectable() export default class MongoEventStoreRepository implements EventStoreRepository { - constructor(@Inject('MONGO_CLIENT') private readonly mongo: MongoConnection) {} + constructor(@Inject(MONGO_CLIENT) private readonly mongo: MongoConnection) {} async save(entity: DomainEvent): Promise { await this.mongo.db.collection('events').updateOne( diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts index 150c48f9..abeb3da2 100644 --- a/src/shared/shared.module.ts +++ b/src/shared/shared.module.ts @@ -13,10 +13,19 @@ import { rabbitMqConfig } from '@src/shared/infrastructure/messenger/rabbitMq/co import { consumers } from '@src/shared/_dependencyInjection/consumers'; import { services } from '@src/shared/_dependencyInjection/services'; import Environment from '@src/shared/infrastructure/utils/environment'; +import { SOCIAL_AUTHENTICATOR } from '@src/languages/domain/auth/socialAuthenticator'; +import NestProjectionBus from '@src/shared/infrastructure/bus/nestProjectionBus'; +import { TypeOrmTransactionalEntityManager } from '@src/shared/infrastructure/persistence/typeOrm/typeOrmTransactionalEntityManager'; +import { MONGO_CLIENT } from '@src/shared/infrastructure/persistence/mongo/mongoConnection'; +import { ConfigModule } from '@nestjs/config'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { dataSourceConfig } from '@src/shared/infrastructure/persistence/typeOrm/dataSource'; @Global() @Module({ imports: [ + ConfigModule.forRoot({ isGlobal: true }), + TypeOrmModule.forRoot(dataSourceConfig), JwtModule.register({ secret: Environment.getVariable('JWT_SECRET'), signOptions: { expiresIn: '2h' }, @@ -38,12 +47,16 @@ import Environment from '@src/shared/infrastructure/utils/environment'; CqrsModule, ClientsModule, JwtStrategy, + NestProjectionBus, + TypeOrmTransactionalEntityManager, + MONGO_CLIENT, LOGGER, QUERY_BUS, COMMAND_BUS, EVENT_BUS, PROJECTION_BUS, ASYNC_EVENT_BUS, + SOCIAL_AUTHENTICATOR, ], }) export class SharedModule {}