mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Added and emitted events for Offer Created
refs https://github.com/TryGhost/Team/issues/1166 Since we removed the creation of coupons from the Offers module, we must emit events so that the Payments module can handle creating Coupons when Offers are created. We also export the events from the module so that they can be listened to by the Payments module. We also export other internals of the module so that the types can be used.
This commit is contained in:
parent
efe5164eff
commit
ff2da8a417
3 changed files with 49 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
||||||
const DomainEvents = require('@tryghost/domain-events');
|
const DomainEvents = require('@tryghost/domain-events');
|
||||||
const OfferCodeChangeEvent = require('./lib/domain/events/OfferCodeChange');
|
const OfferCodeChangeEvent = require('./lib/domain/events/OfferCodeChange');
|
||||||
|
const OfferCreatedEvent = require('./lib/domain/events/OfferCreated');
|
||||||
const OfferRepository = require('./lib/application/OfferRepository');
|
const OfferRepository = require('./lib/application/OfferRepository');
|
||||||
const OffersAPI = require('./lib/application/OffersAPI');
|
const OffersAPI = require('./lib/application/OffersAPI');
|
||||||
|
|
||||||
|
@ -30,6 +31,14 @@ class OffersModule {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
DomainEvents.subscribe(OfferCreatedEvent, (event) => {
|
||||||
|
this.redirectManager.addRedirect(
|
||||||
|
`/${event.data.offer.code.value}`,
|
||||||
|
`/#/portal/offers/${event.data.offer.id}`,
|
||||||
|
{permanent: false}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
const offers = await this.repository.getAll();
|
const offers = await this.repository.getAll();
|
||||||
|
|
||||||
for (const offer of offers) {
|
for (const offer of offers) {
|
||||||
|
@ -54,6 +63,15 @@ class OffersModule {
|
||||||
const offersAPI = new OffersAPI(repository);
|
const offersAPI = new OffersAPI(repository);
|
||||||
return new OffersModule(offersAPI, deps.redirectManager, repository);
|
return new OffersModule(offersAPI, deps.redirectManager, repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static events = {
|
||||||
|
OfferCreatedEvent,
|
||||||
|
OfferCodeChangeEvent
|
||||||
|
};
|
||||||
|
|
||||||
|
static OfferRepository = OfferRepository;
|
||||||
|
|
||||||
|
static OffersAPI = OffersAPI;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = OffersModule;
|
module.exports = OffersModule;
|
||||||
|
|
|
@ -2,6 +2,7 @@ const {flowRight} = require('lodash');
|
||||||
const {mapKeyValues, mapQuery} = require('@nexes/mongo-utils');
|
const {mapKeyValues, mapQuery} = require('@nexes/mongo-utils');
|
||||||
const DomainEvents = require('@tryghost/domain-events');
|
const DomainEvents = require('@tryghost/domain-events');
|
||||||
const OfferCodeChangeEvent = require('../domain/events/OfferCodeChange');
|
const OfferCodeChangeEvent = require('../domain/events/OfferCodeChange');
|
||||||
|
const OfferCreatedEvent = require('../domain/events/OfferCreated');
|
||||||
const Offer = require('../domain/models/Offer');
|
const Offer = require('../domain/models/Offer');
|
||||||
const OfferStatus = require('../domain/models/OfferStatus');
|
const OfferStatus = require('../domain/models/OfferStatus');
|
||||||
|
|
||||||
|
@ -179,7 +180,7 @@ class OfferRepository {
|
||||||
active: offer.status.equals(OfferStatus.create('active'))
|
active: offer.status.equals(OfferStatus.create('active'))
|
||||||
};
|
};
|
||||||
|
|
||||||
if (offer.codeChanged || offer.isNew) {
|
if (offer.codeChanged) {
|
||||||
const event = OfferCodeChangeEvent.create({
|
const event = OfferCodeChangeEvent.create({
|
||||||
offerId: offer.id,
|
offerId: offer.id,
|
||||||
previousCode: offer.oldCode,
|
previousCode: offer.oldCode,
|
||||||
|
@ -189,7 +190,9 @@ class OfferRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offer.isNew) {
|
if (offer.isNew) {
|
||||||
|
const event = OfferCreatedEvent.create({offer});
|
||||||
await this.OfferModel.add(data, options);
|
await this.OfferModel.add(data, options);
|
||||||
|
DomainEvents.dispatch(event);
|
||||||
} else {
|
} else {
|
||||||
await this.OfferModel.edit(data, {...options, id: data.id});
|
await this.OfferModel.edit(data, {...options, id: data.id});
|
||||||
}
|
}
|
||||||
|
|
27
ghost/offers/lib/domain/events/OfferCreated.js
Normal file
27
ghost/offers/lib/domain/events/OfferCreated.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/** @typedef {import('../models/Offer')} Offer */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {object} OfferCreatedEventData
|
||||||
|
* @prop {Offer} offer
|
||||||
|
*/
|
||||||
|
|
||||||
|
class OfferCreatedEvent {
|
||||||
|
/**
|
||||||
|
* @param {OfferCreatedEventData} data
|
||||||
|
* @param {Date} timestamp
|
||||||
|
*/
|
||||||
|
constructor(data, timestamp) {
|
||||||
|
this.data = data;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {OfferCreatedEventData} data
|
||||||
|
* @param {Date} [timestamp]
|
||||||
|
*/
|
||||||
|
static create(data, timestamp) {
|
||||||
|
return new OfferCreatedEvent(data, timestamp || new Date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = OfferCreatedEvent;
|
Loading…
Add table
Reference in a new issue