feat(pause ad): emit update event after pause ad

This commit is contained in:
Fanch
2024-05-16 15:40:03 +02:00
parent 2ce64cd1c4
commit d213408c83
6 changed files with 96 additions and 37 deletions

View File

@@ -1,19 +1,30 @@
import { AD_REPOSITORY } from '@modules/ad/ad.di-tokens';
import { Inject } from '@nestjs/common';
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { AdRepositoryPort } from '../../ports/ad.repository.port';
import { PauseAdCommand } from './pause-ad.command';
import { AdUpdatedDomainEvent } from '@modules/ad/core/domain/events/ad.domain-event';
@CommandHandler(PauseAdCommand)
export class PauseAdService implements ICommandHandler {
constructor(
@Inject(AD_REPOSITORY)
private readonly adRepository: AdRepositoryPort,
private readonly eventEmitter: EventEmitter2,
) {}
async execute(command: PauseAdCommand): Promise<void> {
const ad = await this.adRepository.findOneById(command.id);
const ad = await this.adRepository.findOneById(command.id, {
// TODO: waypoints and schedule needed for event, should be optional if no modif on them ...
waypoints: true,
schedule: true,
});
ad.pause();
await this.adRepository.update(ad.id, ad);
this.eventEmitter.emitAsync(
AdUpdatedDomainEvent.name,
new AdUpdatedDomainEvent(ad),
);
}
}

View File

@@ -1,19 +0,0 @@
import { MessagePublisherPort } from '@mobicoop/ddd-library';
import { AD_MESSAGE_PUBLISHER } from '@modules/ad/ad.di-tokens';
import { Inject, Injectable } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { AD_PAUSED_ROUTING_KEY } from '@src/app.constants';
import { AdPausedDomainEvent } from '../../domain/events/ad-paused.domain-event';
@Injectable()
export class PublishMessageWhenAdIsPausedDomainEventHandler {
constructor(
@Inject(AD_MESSAGE_PUBLISHER)
private readonly messagePublisher: MessagePublisherPort,
) {}
@OnEvent(AdPausedDomainEvent.name, { async: true, promisify: true })
async handle(event: AdPausedDomainEvent): Promise<void> {
this.messagePublisher.publish(AD_PAUSED_ROUTING_KEY, JSON.stringify(event));
}
}

View File

@@ -3,7 +3,6 @@ import { v4 } from 'uuid';
import { AdProps, CreateAdProps, Status } from './ad.types';
import { AdCreatedDomainEvent } from './events/ad-created.domain-event';
import { AdDeletedDomainEvent } from './events/ad-delete.domain-event';
import { AdPausedDomainEvent } from './events/ad-paused.domain-event';
import { AdInvalidatedDomainEvent } from './events/ad-invalidated.domain-event';
import { AdSuspendedDomainEvent } from './events/ad-suspended.domain-event';
import { AdValidatedDomainEvent } from './events/ad-validated.domain-event';
@@ -130,15 +129,6 @@ export class AdEntity extends AggregateRoot<AdProps> {
pause(): AdEntity {
this.props.pause = !this.props.pause;
this.addEvent(
new AdPausedDomainEvent({
metadata: {
correlationId: this.id,
timestamp: Date.now(),
},
aggregateId: this.id,
}),
);
return this;
}
}

View File

@@ -1,7 +0,0 @@
import { DomainEvent, DomainEventProps } from '@mobicoop/ddd-library';
export class AdPausedDomainEvent extends DomainEvent {
constructor(props: DomainEventProps<AdPausedDomainEvent>) {
super(props);
}
}