adding usecase
This commit is contained in:
parent
d17a3b9867
commit
aa24bae84c
|
@ -0,0 +1,45 @@
|
|||
import { Mapper } from '@automapper/core';
|
||||
import { InjectMapper } from '@automapper/nestjs';
|
||||
import { CommandHandler } from '@nestjs/cqrs';
|
||||
import { Messager } from '../../adapters/secondaries/messager';
|
||||
import { AdsRepository } from '../../adapters/secondaries/ads.repository';
|
||||
import { CreateAdCommand } from '../../commands/create-ad.command';
|
||||
import { CreateAdRequest } from '../dtos/create-ad.request';
|
||||
import { Ad } from '../entities/ad';
|
||||
|
||||
@CommandHandler(CreateAdCommand)
|
||||
export class CreateAdUseCase {
|
||||
constructor(
|
||||
private readonly _repository: AdsRepository,
|
||||
private readonly _messager: Messager,
|
||||
@InjectMapper() private readonly _mapper: Mapper,
|
||||
) {}
|
||||
|
||||
async execute(command: CreateAdCommand): Promise<Ad> {
|
||||
const entity = this._mapper.map(
|
||||
command.createAdRequest,
|
||||
CreateAdRequest,
|
||||
Ad,
|
||||
);
|
||||
|
||||
try {
|
||||
const ad = await this._repository.create(entity);
|
||||
this._messager.publish('ad.create', JSON.stringify(ad));
|
||||
this._messager.publish('logging.ad.create.info', JSON.stringify(ad));
|
||||
return ad;
|
||||
} catch (error) {
|
||||
let key = 'logging.ad.create.crit';
|
||||
if (error.message.includes('Already exists')) {
|
||||
key = 'logging.ad.create.warning';
|
||||
}
|
||||
this._messager.publish(
|
||||
key,
|
||||
JSON.stringify({
|
||||
command,
|
||||
error,
|
||||
}),
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue