refactor: using injection by token

This commit is contained in:
user
2022-10-11 15:52:27 +02:00
parent d2c931dfa3
commit 3b3c3aa3d7
8 changed files with 35 additions and 22 deletions

View File

@@ -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,
) {}

View File

@@ -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,
) {}

View File

@@ -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,
) {}

View File

@@ -0,0 +1,3 @@
// Tokens used for Dependency Injection
export const USER_REPOSITORY = Symbol('USER_REPOSITORY');

View File

@@ -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],

View File

@@ -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,
) {}

View File

@@ -0,0 +1 @@
export const WALLET_REPOSITORY = Symbol('WALLET_REPOSITORY');

View File

@@ -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 {}