2021-10-05 17:24:47 +03:00
|
|
|
const DomainEvents = require('@tryghost/domain-events');
|
2021-10-08 13:21:27 +03:00
|
|
|
const OfferCodeChangeEvent = require('./lib/domain/events/OfferCodeChange');
|
2021-10-08 13:27:17 +03:00
|
|
|
const OfferRepository = require('./lib/application/OfferRepository');
|
|
|
|
const OffersAPI = require('./lib/application/OffersAPI');
|
2021-10-05 12:15:57 +03:00
|
|
|
|
|
|
|
class OffersModule {
|
|
|
|
/**
|
|
|
|
* @param {OffersAPI} offersAPI
|
2021-10-05 17:24:47 +03:00
|
|
|
* @param {import('@tryghost/express-dynamic-redirects')} redirectManager
|
2021-10-06 15:58:55 +03:00
|
|
|
* @param {OfferRepository} repository
|
2021-10-05 12:15:57 +03:00
|
|
|
*/
|
2021-10-06 15:58:55 +03:00
|
|
|
constructor(offersAPI, redirectManager, repository) {
|
2021-10-05 12:15:57 +03:00
|
|
|
this.api = offersAPI;
|
2021-10-06 15:58:55 +03:00
|
|
|
this.repository = repository;
|
2021-10-05 17:24:47 +03:00
|
|
|
this.redirectManager = redirectManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @returns {Promise<void>}
|
|
|
|
*/
|
|
|
|
async init() {
|
|
|
|
DomainEvents.subscribe(OfferCodeChangeEvent, (event) => {
|
2021-10-08 14:02:22 +03:00
|
|
|
if (event.data.previousCode) {
|
|
|
|
this.redirectManager.removeRedirect(`/${event.data.previousCode.value}`);
|
2021-10-05 17:24:47 +03:00
|
|
|
}
|
|
|
|
this.redirectManager.addRedirect(
|
2021-10-07 17:42:56 +03:00
|
|
|
`/${event.data.currentCode.value}`,
|
2021-10-05 17:24:47 +03:00
|
|
|
`/#/portal/offers/${event.data.offerId}`,
|
|
|
|
{permanent: false}
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2021-10-07 17:42:56 +03:00
|
|
|
const offers = await this.repository.getAll();
|
2021-10-05 17:24:47 +03:00
|
|
|
|
|
|
|
for (const offer of offers) {
|
|
|
|
this.redirectManager.addRedirect(
|
2021-10-07 17:42:56 +03:00
|
|
|
`/${offer.code.value}`,
|
2021-10-05 17:24:47 +03:00
|
|
|
`/#/portal/offers/${offer.id}`,
|
|
|
|
{permanent: false}
|
|
|
|
);
|
|
|
|
}
|
2021-10-05 12:15:57 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {object} deps
|
|
|
|
* @param {import('@tryghost/express-dynamic-redirects')} deps.redirectManager
|
|
|
|
* @param {import('@tryghost/members-stripe-service')} deps.stripeAPIService
|
|
|
|
* @param {any} deps.OfferModel
|
2021-10-15 12:16:55 +03:00
|
|
|
* @param {any} deps.OfferRedemptionModel
|
2021-10-05 12:15:57 +03:00
|
|
|
*
|
|
|
|
* @returns {OffersModule}
|
|
|
|
*/
|
|
|
|
static create(deps) {
|
2021-10-15 12:16:55 +03:00
|
|
|
const repository = new OfferRepository(deps.OfferModel, deps.OfferRedemptionModel, deps.stripeAPIService);
|
2021-10-05 12:15:57 +03:00
|
|
|
const offersAPI = new OffersAPI(repository);
|
2021-10-06 15:58:55 +03:00
|
|
|
return new OffersModule(offersAPI, deps.redirectManager, repository);
|
2021-10-05 12:15:57 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = OffersModule;
|