Skip to content

Commit 257eca9

Browse files
committed
Moved @tryghost/tiers to core folder
fix https://linear.app/ghost/issue/ENG-2383/tiers - this commit moves the lib code and tests to the core folder so we can colocate code in one place rather than splitting it out across packages, which increases the cognitive load and overhead
1 parent 733891e commit 257eca9

26 files changed

+41
-140
lines changed

.docker/Dockerfile

-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ COPY ghost/post-events/package.json ghost/post-events/package.json
8888
COPY ghost/post-revisions/package.json ghost/post-revisions/package.json
8989
COPY ghost/prometheus-metrics/package.json ghost/prometheus-metrics/package.json
9090
COPY ghost/security/package.json ghost/security/package.json
91-
COPY ghost/tiers/package.json ghost/tiers/package.json
9291
COPY ghost/webmentions/package.json ghost/webmentions/package.json
9392

9493
## Install dependencies

compose.yml

-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ services:
5353
- node_modules_ghost_post-revisions:/home/ghost/ghost/post-revisions/node_modules:delegated
5454
- node_modules_ghost_prometheus-metrics:/home/ghost/ghost/prometheus-metrics/node_modules:delegated
5555
- node_modules_ghost_security:/home/ghost/ghost/security/node_modules:delegated
56-
- node_modules_ghost_tiers:/home/ghost/ghost/tiers/node_modules:delegated
5756
- node_modules_ghost_webmentions:/home/ghost/ghost/webmentions/node_modules:delegated
5857
- node_modules_apps_admin-x-activitypub:/home/ghost/apps/admin-x-activitypub/node_modules:delegated
5958
- node_modules_apps_admin-x-design-system:/home/ghost/apps/admin-x-design-system/node_modules:delegated
@@ -200,7 +199,6 @@ volumes:
200199
node_modules_ghost_post-revisions: {}
201200
node_modules_ghost_prometheus-metrics: {}
202201
node_modules_ghost_security: {}
203-
node_modules_ghost_tiers: {}
204202
node_modules_ghost_webmentions: {}
205203
node_modules_apps_admin-x-activitypub: {}
206204
node_modules_apps_admin-x-design-system: {}

ghost/core/core/server/services/members/importer/MembersCSVImporter.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ const DEFAULT_CSV_HEADER_MAPPING = {
3333
* @property {string} storagePath - The path to store CSV's in before importing
3434
* @property {Function} getTimezone - function returning currently configured timezone
3535
* @property {() => Object} getMembersRepository - member model access instance for data access and manipulation
36-
* @property {() => Promise<import('@tryghost/tiers/lib/Tier')>} getDefaultTier - async function returning default Member Tier
37-
* @property {(string) => Promise<import('@tryghost/tiers/lib/Tier')>} getTierByName - async function returning Member Tier by name
36+
* @property {() => Promise<import('../../tiers/Tier')>} getDefaultTier - async function returning default Member Tier
37+
* @property {(string) => Promise<import('../../tiers/Tier')>} getTierByName - async function returning Member Tier by name
3838
* @property {Function} sendEmail - function sending an email
3939
* @property {(string) => boolean} isSet - Method checking if specific feature is enabled
4040
* @property {({job, offloaded, name}) => void} addJob - Method registering an async job

ghost/core/core/server/services/members/members-api/services/PaymentsService.js

+12-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const logging = require('@tryghost/logging');
22
const DomainEvents = require('@tryghost/domain-events');
3-
const {TierCreatedEvent, TierPriceChangeEvent, TierNameChangeEvent} = require('@tryghost/tiers');
3+
const TierCreatedEvent = require('../../../../../../core/server/services/tiers/TierCreatedEvent');
4+
const TierPriceChangeEvent = require('../../../../../../core/server/services/tiers/TierPriceChangeEvent');
5+
const TierNameChangeEvent = require('../../../../../../core/server/services/tiers/TierNameChangeEvent');
46
const OfferCreatedEvent = require('@tryghost/members-offers').events.OfferCreatedEvent;
57
const {BadRequestError} = require('@tryghost/errors');
68

@@ -9,7 +11,7 @@ class PaymentsService {
911
* @param {object} deps
1012
* @param {import('bookshelf').Model} deps.Offer
1113
* @param {import('@tryghost/members-offers/lib/application/OffersAPI')} deps.offersAPI
12-
* @param {import('@tryghost/members-stripe-service/lib/StripeAPI')} deps.stripeAPIService
14+
* @param {import('../../../stripe/StripeAPI')} deps.stripeAPIService
1315
* @param {{get(key: string): any}} deps.settingsCache
1416
*/
1517
constructor(deps) {
@@ -55,7 +57,7 @@ class PaymentsService {
5557

5658
/**
5759
* @param {object} params
58-
* @param {Tier} params.tier
60+
* @param {import('../../../tiers/Tier')} params.tier
5961
* @param {Tier.Cadence} params.cadence
6062
* @param {Offer} [params.offer]
6163
* @param {Member} [params.member]
@@ -127,15 +129,15 @@ class PaymentsService {
127129
if (member && isAuthenticated) {
128130
customer = await this.getCustomerForMember(member);
129131
}
130-
132+
131133
const data = {
132134
priceId: (await this.getPriceForDonations()).id,
133135
metadata,
134136
successUrl: successUrl,
135137
cancelUrl: cancelUrl,
136138
customer,
137139
customerEmail: !customer && email ? email : null,
138-
personalNote: personalNote
140+
personalNote: personalNote
139141

140142
};
141143

@@ -181,7 +183,7 @@ class PaymentsService {
181183
}
182184

183185
/**
184-
* @param {import('@tryghost/tiers').Tier} tier
186+
* @param {import('../../../tiers/Tier')} tier
185187
* @returns {Promise<{id: string}>}
186188
*/
187189
async getProductForTier(tier) {
@@ -209,7 +211,7 @@ class PaymentsService {
209211
}
210212

211213
/**
212-
* @param {import('@tryghost/tiers').Tier} tier
214+
* @param {import('../../../tiers/Tier')} tier
213215
* @returns {Promise<import('stripe').default.Product>}
214216
*/
215217
async createProductForTier(tier) {
@@ -222,7 +224,7 @@ class PaymentsService {
222224
}
223225

224226
/**
225-
* @param {import('@tryghost/tiers').Tier} tier
227+
* @param {import('../../../tiers/Tier')} tier
226228
* @returns {Promise<void>}
227229
*/
228230
async updateNameForTierProducts(tier) {
@@ -396,7 +398,7 @@ class PaymentsService {
396398
}
397399

398400
/**
399-
* @param {import('@tryghost/tiers').Tier} tier
401+
* @param {import('../../../tiers/Tier')} tier
400402
* @param {'month'|'year'} cadence
401403
* @returns {Promise<{id: string}>}
402404
*/
@@ -440,7 +442,7 @@ class PaymentsService {
440442
}
441443

442444
/**
443-
* @param {import('@tryghost/tiers').Tier} tier
445+
* @param {import('../../../tiers/Tier')} tier
444446
* @param {'month'|'year'} cadence
445447
* @returns {Promise<import('stripe').default.Price>}
446448
*/

ghost/tiers/lib/TierActivatedEvent.js renamed to ghost/core/core/server/services/tiers/TierActivatedEvent.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {object} TierActivatedEventData
3-
* @prop {Tier} tier
3+
* @prop {import('./Tier')} tier
44
*/
55

66
class TierActivatedEvent {

ghost/tiers/lib/TierArchivedEvent.js renamed to ghost/core/core/server/services/tiers/TierArchivedEvent.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {object} TierArchivedEventData
3-
* @prop {Tier} tier
3+
* @prop {import('./Tier')} tier
44
*/
55

66
class TierArchivedEvent {

ghost/tiers/lib/TierCreatedEvent.js renamed to ghost/core/core/server/services/tiers/TierCreatedEvent.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {object} TierCreatedEventData
3-
* @prop {Tier} tier
3+
* @prop {import('./Tier')} tier
44
*/
55

66
class TierCreatedEvent {

ghost/tiers/lib/TierNameChangeEvent.js renamed to ghost/core/core/server/services/tiers/TierNameChangeEvent.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {object} TierNameChangeEventData
3-
* @prop {Tier} tier
3+
* @prop {import('./Tier')} tier
44
*/
55

66
class TierNameChangeEvent {

ghost/tiers/lib/TierPriceChangeEvent.js renamed to ghost/core/core/server/services/tiers/TierPriceChangeEvent.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {object} TierPriceChangeEventData
3-
* @prop {Tier} tier
3+
* @prop {import('./Tier')} tier
44
*/
55

66
class TierPriceChangeEvent {

ghost/core/core/server/services/tiers/TierRepository.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
const {Tier} = require('@tryghost/tiers');
1+
const Tier = require('./Tier');
22
const nql = require('@tryghost/nql');
33

44
/**
5-
* @typedef {import('@tryghost/tiers/lib/TiersAPI').ITierRepository} ITierRepository
5+
* @typedef {import('./TiersAPI').ITierRepository} ITierRepository
66
*/
77

88
/**
99
* @implements {ITierRepository}
1010
*/
1111
module.exports = class TierRepository {
12-
/** @type {import('@tryghost/tiers/lib/Tier')[]} */
12+
/** @type {import('./Tier')[]} */
1313
#store = [];
1414
/** @type {Object.<string, true>} */
1515
#ids = {};
@@ -44,7 +44,7 @@ module.exports = class TierRepository {
4444
}
4545

4646
/**
47-
* @param {import('@tryghost/tiers/lib/Tier')} tier
47+
* @param {import('./Tier')} tier
4848
* @returns {any}
4949
*/
5050
toPrimitive(tier) {
@@ -83,7 +83,7 @@ module.exports = class TierRepository {
8383
/**
8484
* @param {object} [options]
8585
* @param {string} [options.filter]
86-
* @returns {Promise<import('@tryghost/tiers/lib/Tier')[]>}
86+
* @returns {Promise<import('./Tier')[]>}
8787
*/
8888
async getAll(options = {}) {
8989
const filter = nql();
@@ -97,7 +97,7 @@ module.exports = class TierRepository {
9797

9898
/**
9999
* @param {import('bson-objectid').default} id
100-
* @returns {Promise<import('@tryghost/tiers/lib/Tier')>}
100+
* @returns {Promise<import('./Tier')>}
101101
*/
102102
async getById(id) {
103103
const found = this.#store.find((item) => {
@@ -112,7 +112,7 @@ module.exports = class TierRepository {
112112
}
113113

114114
/**
115-
* @param {import('@tryghost/tiers/lib/Tier')} tier
115+
* @param {import('./Tier')} tier
116116
* @returns {Promise<void>}
117117
*/
118118
async save(tier) {

ghost/core/core/server/services/tiers/service.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class TiersServiceWrapper {
55
return;
66
}
77

8-
const {TiersAPI} = require('@tryghost/tiers');
8+
const TiersAPI = require('./TiersAPI');
99
const DomainEvents = require('@tryghost/domain-events');
1010

1111
const models = require('../../models');

ghost/core/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@
118118
"@tryghost/security": "0.0.0",
119119
"@tryghost/social-urls": "0.1.47",
120120
"@tryghost/string": "0.2.13",
121-
"@tryghost/tiers": "0.0.0",
122121
"@tryghost/tpl": "0.1.34",
123122
"@tryghost/url-utils": "4.4.9",
124123
"@tryghost/validator": "0.2.16",

ghost/core/test/unit/server/services/members/importer/MembersCSVImporter.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require('should');
22

3-
const Tier = require('@tryghost/tiers/lib/Tier');
3+
const Tier = require('../../../../../../core/server/services/tiers/Tier');
44
const ObjectID = require('bson-objectid').default;
55
const assert = require('assert/strict');
66
const fs = require('fs-extra');

ghost/core/test/unit/server/services/members/members-api/services/payments.test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const assert = require('assert/strict');
22
const sinon = require('sinon');
3-
const knex = require('knex');
4-
const {Tier} = require('@tryghost/tiers');
3+
const knex = require('knex').default;
4+
5+
const Tier = require('../../../../../../../core/server/services/tiers/Tier');
56

67
const PaymentsService = require('../../../../../../../core/server/services/members/members-api/services/PaymentsService');
78

ghost/tiers/test/Tier.test.js renamed to ghost/core/test/unit/server/services/tiers/Tier.test.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
const assert = require('assert/strict');
2-
const ObjectID = require('bson-objectid');
3-
const Tier = require('../lib/Tier');
4-
const TierActivatedEvent = require('../lib/TierActivatedEvent');
5-
const TierArchivedEvent = require('../lib/TierArchivedEvent');
6-
const TierNameChangeEvent = require('../lib/TierNameChangeEvent');
7-
const TierPriceChangeEvent = require('../lib/TierPriceChangeEvent');
2+
const ObjectID = require('bson-objectid').default;
3+
const Tier = require('../../../../../core/server/services/tiers/Tier');
4+
const TierActivatedEvent = require('../../../../../core/server/services/tiers/TierActivatedEvent');
5+
const TierArchivedEvent = require('../../../../../core/server/services/tiers/TierArchivedEvent');
6+
const TierNameChangeEvent = require('../../../../../core/server/services/tiers/TierNameChangeEvent');
7+
const TierPriceChangeEvent = require('../../../../../core/server/services/tiers/TierPriceChangeEvent');
88

99
async function assertError(fn, checkError) {
1010
let error;

ghost/core/test/unit/server/services/tiers/TierRepository.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const assert = require('assert/strict');
22
const sinon = require('sinon');
33
const {Product: ProductModel} = require('../../../../../core/server/models/product');
44
const TierRepository = require('../../../../../core/server/services/tiers/TierRepository');
5-
const {Tier} = require('@tryghost/tiers');
5+
const Tier = require('../../../../../core/server/services/tiers/Tier');
66

77
describe('TierRepository', function () {
88
after(function () {

ghost/tiers/test/TiersAPI.test.js renamed to ghost/core/test/unit/server/services/tiers/TiersAPI.test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const assert = require('assert/strict');
2-
const TiersAPI = require('../lib/TiersAPI');
3-
const InMemoryTierRepository = require('../lib/InMemoryTierRepository');
2+
3+
const TiersAPI = require('../../../../../core/server/services/tiers/TiersAPI');
4+
const InMemoryTierRepository = require('../../../../../core/server/services/tiers/InMemoryTierRepository');
45

56
describe('TiersAPI', function () {
67
/** @type {TiersAPI.ITierRepository} */

ghost/tiers/.eslintrc.js

-6
This file was deleted.

ghost/tiers/README.md

-23
This file was deleted.

ghost/tiers/index.js

-16
This file was deleted.

ghost/tiers/package.json

-30
This file was deleted.

ghost/tiers/test/.eslintrc.js

-6
This file was deleted.

ghost/tiers/test/index.test.js

-18
This file was deleted.

0 commit comments

Comments
 (0)