mirror of
https://gitlab.com/mobicoop/v3/service/ad.git
synced 2026-01-11 20:02:41 +00:00
feat(pause ad): emit update event after pause ad
This commit is contained in:
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
import { DomainEvent, DomainEventProps } from '@mobicoop/ddd-library';
|
||||
|
||||
export class AdPausedDomainEvent extends DomainEvent {
|
||||
constructor(props: DomainEventProps<AdPausedDomainEvent>) {
|
||||
super(props);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user