From cdd65f25acefc76c1f5f5d0da2c38239bba7d982 Mon Sep 17 00:00:00 2001 From: Naz Date: Wed, 26 Oct 2022 14:20:19 +0800 Subject: [PATCH] Migrated members importer to use tiers refs https://github.com/TryGhost/Team/issues/2077 - The "productRepository" methods have been deprecated in favor of "tiers" and "Tiers API". - The changes migrated usages of "productRepository.getDefaultProduct" to Tiers API's "readDefaultTier" --- .../core/core/server/services/members/service.js | 6 +++--- ghost/members-importer/lib/importer.js | 2 +- ghost/tiers/lib/InMemoryTierRepository.js | 2 ++ ghost/tiers/lib/TiersAPI.js | 15 +++++++++++++++ ghost/tiers/test/TiersAPI.test.js | 6 ++++++ 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ghost/core/core/server/services/members/service.js b/ghost/core/core/server/services/members/service.js index 9b66c07473..7a58252234 100644 --- a/ghost/core/core/server/services/members/service.js +++ b/ghost/core/core/server/services/members/service.js @@ -16,6 +16,7 @@ const config = require('../../../shared/config'); const models = require('../../models'); const {GhostMailer} = require('../mail'); const jobsService = require('../jobs'); +const tiersService = require('../tiers'); const VerificationTrigger = require('@tryghost/verification-trigger'); const DatabaseInfo = require('@tryghost/database-info'); const settingsHelpers = require('../settings-helpers'); @@ -51,9 +52,8 @@ const membersImporter = new MembersCSVImporter({ const api = await module.exports.api; return api.members; }, - getDefaultTier: async () => { - const api = await module.exports.api; - return api.productRepository.getDefaultProduct; + getDefaultTier: () => { + return tiersService.api.readDefaultTier(); }, sendEmail: ghostMailer.send.bind(ghostMailer), isSet: labsService.isSet.bind(labsService), diff --git a/ghost/members-importer/lib/importer.js b/ghost/members-importer/lib/importer.js index 66c9e1c856..f2ad24f50a 100644 --- a/ghost/members-importer/lib/importer.js +++ b/ghost/members-importer/lib/importer.js @@ -30,7 +30,7 @@ module.exports = class MembersCSVImporter { * @param {string} options.storagePath - The path to store CSV's in before importing * @param {Function} options.getTimezone - function returning currently configured timezone * @param {() => Object} options.getMembersRepository - member model access instance for data access and manipulation - * @param {() => Object} options.getDefaultTier - async function returning default Member Tier + * @param {() => Promise} options.getDefaultTier - async function returning default Member Tier * @param {Function} options.sendEmail - function sending an email * @param {(string) => boolean} options.isSet - Method checking if specific feature is enabled * @param {({job, offloaded}) => void} options.addJob - Method registering an async job diff --git a/ghost/tiers/lib/InMemoryTierRepository.js b/ghost/tiers/lib/InMemoryTierRepository.js index 5b6d461704..682efcaacf 100644 --- a/ghost/tiers/lib/InMemoryTierRepository.js +++ b/ghost/tiers/lib/InMemoryTierRepository.js @@ -17,6 +17,8 @@ class InMemoryTierRepository { toPrimitive(tier) { return { ...tier, + active: (tier.status === 'active'), + type: tier.type, id: tier.id.toHexString() }; } diff --git a/ghost/tiers/lib/TiersAPI.js b/ghost/tiers/lib/TiersAPI.js index 2693f03d05..32db320a70 100644 --- a/ghost/tiers/lib/TiersAPI.js +++ b/ghost/tiers/lib/TiersAPI.js @@ -76,6 +76,21 @@ module.exports = class TiersAPI { return tier; } + /** + * Fetches the default tier + * @param {object} [options] + * @returns {Promise} + */ + async readDefaultTier(options = {}) { + const [defaultTier] = await this.#repository.getAll({ + filter: 'type:paid+active:true', + limit: 1, + ...options + }); + + return defaultTier; + } + /** * @param {string} id * @param {object} data diff --git a/ghost/tiers/test/TiersAPI.test.js b/ghost/tiers/test/TiersAPI.test.js index e430810adf..8ec2924069 100644 --- a/ghost/tiers/test/TiersAPI.test.js +++ b/ghost/tiers/test/TiersAPI.test.js @@ -72,4 +72,10 @@ describe('TiersAPI', function () { assert(page.data.length === 2); assert(page.meta.pagination.total === 2); }); + + it('Can read a default tier', async function () { + const defaultTier = await api.readDefaultTier(); + + assert.equal(defaultTier?.name, 'My testing Tier'); + }); });