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