import { Mapper } from '@automapper/core'; import { InjectMapper } from '@automapper/nestjs'; import { CommandHandler } from '@nestjs/cqrs'; import { UserMessager } from '../../adapters/secondaries/user.messager'; import { UsersRepository } from '../../adapters/secondaries/users.repository'; import { CreateUserCommand } from '../../commands/create-user.command'; import { CreateUserRequest } from '../dtos/create-user.request'; import { User } from '../entities/user'; @CommandHandler(CreateUserCommand) export class CreateUserUseCase { constructor( private readonly _repository: UsersRepository, private readonly _messager: UserMessager, @InjectMapper() private readonly _mapper: Mapper, ) {} async execute(command: CreateUserCommand): Promise { const entity = this._mapper.map( command.createUserRequest, CreateUserRequest, User, ); const user = await this._repository.create(entity); if (user) { this._messager.publish('user.create', JSON.stringify(user)); } return user; } }