From 3b3c3aa3d76d29158939f261ff42d7ca65247d87 Mon Sep 17 00:00:00 2001 From: user Date: Tue, 11 Oct 2022 15:52:27 +0200 Subject: [PATCH] refactor: using injection by token --- .../create-user/create-user.service.ts | 4 ++-- .../delete-user/delete-user.service.ts | 4 ++-- .../find-users/find-users.query-handler.ts | 4 ++-- src/modules/user/user.di-tokens.ts | 3 +++ src/modules/user/user.module.ts | 17 +++++++++------- ...en-user-is-created.domain-event-handler.ts | 4 ++-- src/modules/wallet/wallet.di-tokens.ts | 1 + src/modules/wallet/wallet.module.ts | 20 ++++++++++++------- 8 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 src/modules/user/user.di-tokens.ts create mode 100644 src/modules/wallet/wallet.di-tokens.ts diff --git a/src/modules/user/commands/create-user/create-user.service.ts b/src/modules/user/commands/create-user/create-user.service.ts index 84a2c5e..9e5da7c 100644 --- a/src/modules/user/commands/create-user/create-user.service.ts +++ b/src/modules/user/commands/create-user/create-user.service.ts @@ -11,12 +11,12 @@ import { InternalServerErrorException, } from '@libs/exceptions'; import { Inject } from '@nestjs/common'; -import { UserRepository } from '@modules/user/database/user.repository'; +import { USER_REPOSITORY } from '../../user.di-tokens'; @CommandHandler(CreateUserCommand) export class CreateUserService implements ICommandHandler { constructor( - @Inject(UserRepository) + @Inject(USER_REPOSITORY) protected readonly userRepo: UserRepositoryPort, ) {} diff --git a/src/modules/user/commands/delete-user/delete-user.service.ts b/src/modules/user/commands/delete-user/delete-user.service.ts index a9046ca..e94ba2c 100644 --- a/src/modules/user/commands/delete-user/delete-user.service.ts +++ b/src/modules/user/commands/delete-user/delete-user.service.ts @@ -3,7 +3,7 @@ import { UserRepositoryPort } from '@modules/user/database/user.repository.port' import { Inject } from '@nestjs/common'; import { CommandHandler } from '@nestjs/cqrs'; import { Err, Ok, Result } from 'oxide.ts'; -import { UserRepository } from '../../database/user.repository'; +import { USER_REPOSITORY } from '../../user.di-tokens'; export class DeleteUserCommand { readonly userId: string; @@ -16,7 +16,7 @@ export class DeleteUserCommand { @CommandHandler(DeleteUserCommand) export class DeleteUserService { constructor( - @Inject(UserRepository) + @Inject(USER_REPOSITORY) private readonly userRepo: UserRepositoryPort, ) {} diff --git a/src/modules/user/queries/find-users/find-users.query-handler.ts b/src/modules/user/queries/find-users/find-users.query-handler.ts index 3d20d9c..98c7abd 100644 --- a/src/modules/user/queries/find-users/find-users.query-handler.ts +++ b/src/modules/user/queries/find-users/find-users.query-handler.ts @@ -2,7 +2,7 @@ import { IQueryHandler, QueryHandler } from '@nestjs/cqrs'; import { Ok, Result } from 'oxide.ts'; import { Inject } from '@nestjs/common'; import { UserRepositoryPort } from '../../database/user.repository.port'; -import { UserRepository } from '../../database/user.repository'; +import { USER_REPOSITORY } from '../../user.di-tokens'; import { UserEntity } from '@modules/user/domain/user.entity'; import { PaginatedParams, PaginatedQueryBase } from '@libs/ddd/query.base'; import { Paginated } from '@src/libs/ddd'; @@ -25,7 +25,7 @@ export class FindUsersQuery extends PaginatedQueryBase { @QueryHandler(FindUsersQuery) export class FindUsersQueryHandler implements IQueryHandler { constructor( - @Inject(UserRepository) + @Inject(USER_REPOSITORY) private readonly userRepo: UserRepositoryPort, ) {} diff --git a/src/modules/user/user.di-tokens.ts b/src/modules/user/user.di-tokens.ts new file mode 100644 index 0000000..bf617eb --- /dev/null +++ b/src/modules/user/user.di-tokens.ts @@ -0,0 +1,3 @@ +// Tokens used for Dependency Injection + +export const USER_REPOSITORY = Symbol('USER_REPOSITORY'); diff --git a/src/modules/user/user.module.ts b/src/modules/user/user.module.ts index 0d6f983..fdeb47a 100644 --- a/src/modules/user/user.module.ts +++ b/src/modules/user/user.module.ts @@ -1,4 +1,4 @@ -import { Logger, Module } from '@nestjs/common'; +import { Logger, Module, Provider } from '@nestjs/common'; import { UserRepository } from './database/user.repository'; import { CreateUserHttpController } from './commands/create-user/create-user.http.controller'; import { DeleteUserHttpController } from './commands/delete-user/delete-user.http-controller'; @@ -11,6 +11,7 @@ import { DeleteUserService } from './commands/delete-user/delete-user.service'; import { FindUsersQueryHandler } from './queries/find-users/find-users.query-handler'; import { UserMapper } from './user.mapper'; import { CqrsModule } from '@nestjs/cqrs'; +import { USER_REPOSITORY } from './user.di-tokens'; const httpControllers = [ CreateUserHttpController, @@ -20,17 +21,19 @@ const httpControllers = [ const messageControllers = [CreateUserMessageController]; -const cliControllers = [CreateUserCliController]; +const cliControllers: Provider[] = [CreateUserCliController]; -const graphqlResolvers = [CreateUserGraphqlResolver]; +const graphqlResolvers: Provider[] = [CreateUserGraphqlResolver]; -const repositories = [UserRepository]; +const commandHandlers: Provider[] = [CreateUserService, DeleteUserService]; -const commandHandlers = [CreateUserService, DeleteUserService]; +const queryHandlers: Provider[] = [FindUsersQueryHandler]; -const queryHandlers = [FindUsersQueryHandler]; +const mappers: Provider[] = [UserMapper]; -const mappers = [UserMapper]; +const repositories: Provider[] = [ + { provide: USER_REPOSITORY, useClass: UserRepository }, +]; @Module({ imports: [CqrsModule], diff --git a/src/modules/wallet/application/event-handlers/create-wallet-when-user-is-created.domain-event-handler.ts b/src/modules/wallet/application/event-handlers/create-wallet-when-user-is-created.domain-event-handler.ts index 671c846..770aa9d 100644 --- a/src/modules/wallet/application/event-handlers/create-wallet-when-user-is-created.domain-event-handler.ts +++ b/src/modules/wallet/application/event-handlers/create-wallet-when-user-is-created.domain-event-handler.ts @@ -3,12 +3,12 @@ import { WalletRepositoryPort } from '@modules/wallet/database/wallet.repository import { WalletEntity } from '../../domain/wallet.entity'; import { OnEvent } from '@nestjs/event-emitter'; import { Inject, Injectable } from '@nestjs/common'; -import { WalletRepository } from '@modules/wallet/database/wallet.repository'; +import { WALLET_REPOSITORY } from '../../wallet.di-tokens'; @Injectable() export class CreateWalletWhenUserIsCreatedDomainEventHandler { constructor( - @Inject(WalletRepository) + @Inject(WALLET_REPOSITORY) private readonly walletRepo: WalletRepositoryPort, ) {} diff --git a/src/modules/wallet/wallet.di-tokens.ts b/src/modules/wallet/wallet.di-tokens.ts new file mode 100644 index 0000000..954a06b --- /dev/null +++ b/src/modules/wallet/wallet.di-tokens.ts @@ -0,0 +1 @@ +export const WALLET_REPOSITORY = Symbol('WALLET_REPOSITORY'); diff --git a/src/modules/wallet/wallet.module.ts b/src/modules/wallet/wallet.module.ts index c0e4be3..99ad0fe 100644 --- a/src/modules/wallet/wallet.module.ts +++ b/src/modules/wallet/wallet.module.ts @@ -1,16 +1,22 @@ -import { Logger, Module } from '@nestjs/common'; +import { Logger, Module, Provider } from '@nestjs/common'; import { CreateWalletWhenUserIsCreatedDomainEventHandler } from './application/event-handlers/create-wallet-when-user-is-created.domain-event-handler'; import { WalletRepository } from './database/wallet.repository'; +import { WALLET_REPOSITORY } from './wallet.di-tokens'; import { WalletMapper } from './wallet.mapper'; +const eventHandlers: Provider[] = [ + CreateWalletWhenUserIsCreatedDomainEventHandler, +]; + +const mappers: Provider[] = [WalletMapper]; + +const repositories: Provider[] = [ + { provide: WALLET_REPOSITORY, useClass: WalletRepository }, +]; + @Module({ imports: [], controllers: [], - providers: [ - CreateWalletWhenUserIsCreatedDomainEventHandler, - WalletRepository, - WalletMapper, - Logger, - ], + providers: [Logger, ...eventHandlers, ...mappers, ...repositories], }) export class WalletModule {}