refactor: using injection by token
This commit is contained in:
@@ -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,
|
||||
) {}
|
||||
|
||||
|
||||
@@ -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,
|
||||
) {}
|
||||
|
||||
|
||||
@@ -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,
|
||||
) {}
|
||||
|
||||
|
||||
3
src/modules/user/user.di-tokens.ts
Normal file
3
src/modules/user/user.di-tokens.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
// Tokens used for Dependency Injection
|
||||
|
||||
export const USER_REPOSITORY = Symbol('USER_REPOSITORY');
|
||||
@@ -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],
|
||||
|
||||
@@ -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,
|
||||
) {}
|
||||
|
||||
|
||||
1
src/modules/wallet/wallet.di-tokens.ts
Normal file
1
src/modules/wallet/wallet.di-tokens.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const WALLET_REPOSITORY = Symbol('WALLET_REPOSITORY');
|
||||
@@ -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 {}
|
||||
|
||||
Reference in New Issue
Block a user