0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00

Simplyfied milestone event meta data

no issue

- Reduced the amount of diffeerent properties by not populating a `currentARR` and `currentMembers` fields, but use a `currentValue` instead.
- The type of milestone can still be determined by its `type` property, so we actually don't need two different props here
This commit is contained in:
Aileen Nowak 2023-02-23 16:18:39 +02:00 committed by Aileen Booker
parent d820b961b0
commit 74a65f3b1c
8 changed files with 16 additions and 19 deletions

View file

@ -37,7 +37,7 @@ describe('Slack Notifications Service', function () {
emailSentAt: new Date() emailSentAt: new Date()
}, },
meta: { meta: {
currentARR: 105 currentValue: 105
} }
})); }));

View file

@ -246,13 +246,12 @@ describe('Staff Service:', function () {
milestone: { milestone: {
type: 'arr', type: 'arr',
currency: 'usd', currency: 'usd',
name: 'arr-100-usd',
value: 100, value: 100,
createdAt: new Date(), createdAt: new Date(),
emailSentAt: new Date() emailSentAt: new Date()
}, },
meta: { meta: {
currentARR: 105 currentValue: 105
} }
})); }));

View file

@ -178,7 +178,7 @@ module.exports = class MilestonesService {
if (milestone?.meta) { if (milestone?.meta) {
// Check how much the value currently differs from the milestone // Check how much the value currently differs from the milestone
const difference = (milestone?.meta?.currentMembers || milestone?.meta?.currentARR) - milestone.value; const difference = milestone?.meta?.currentValue - milestone.value;
const differenceInPercentage = difference / milestone.value; const differenceInPercentage = difference / milestone.value;
emailTooClose = differenceInPercentage >= this.#milestonesConfig.maxPercentageFromMilestone; emailTooClose = differenceInPercentage >= this.#milestonesConfig.maxPercentageFromMilestone;
@ -227,7 +227,7 @@ module.exports = class MilestonesService {
if (!milestoneExists && (!latestMilestone || milestone > latestMilestone.value)) { if (!milestoneExists && (!latestMilestone || milestone > latestMilestone.value)) {
const meta = { const meta = {
currentARR: currentARRForCurrency.arr currentValue: currentARRForCurrency.arr
}; };
return await this.#saveMileStoneAndSendEmail({value: milestone, type: 'arr', currency: defaultCurrency, meta}); return await this.#saveMileStoneAndSendEmail({value: milestone, type: 'arr', currency: defaultCurrency, meta});
} }
@ -258,7 +258,7 @@ module.exports = class MilestonesService {
if (!milestoneExists && (!latestMembersMilestone || milestone > latestMembersMilestone.value)) { if (!milestoneExists && (!latestMembersMilestone || milestone > latestMembersMilestone.value)) {
const meta = { const meta = {
currentMembers: membersCount currentValue: membersCount
}; };
return await this.#saveMileStoneAndSendEmail({value: milestone, type: 'members', meta}); return await this.#saveMileStoneAndSendEmail({value: milestone, type: 'members', meta});
} }

View file

@ -74,7 +74,7 @@ describe('MilestonesService', function () {
const domainEventSpyResult = domainEventSpy.getCall(0).args[0]; const domainEventSpyResult = domainEventSpy.getCall(0).args[0];
assert(domainEventSpy.calledOnce === true); assert(domainEventSpy.calledOnce === true);
assert(domainEventSpyResult.data.milestone); assert(domainEventSpyResult.data.milestone);
assert(domainEventSpyResult.data.meta.currentARR === 1298); assert(domainEventSpyResult.data.meta.currentValue === 1298);
}); });
it('Adds next ARR milestone and sends email', async function () { it('Adds next ARR milestone and sends email', async function () {
@ -134,7 +134,7 @@ describe('MilestonesService', function () {
assert(domainEventSpy.callCount === 4); // we have just created a new milestone assert(domainEventSpy.callCount === 4); // we have just created a new milestone
const domainEventSpyResult = domainEventSpy.getCall(3).args[0]; const domainEventSpyResult = domainEventSpy.getCall(3).args[0];
assert(domainEventSpyResult.data.milestone); assert(domainEventSpyResult.data.milestone);
assert(domainEventSpyResult.data.meta.currentARR === 10001); assert(domainEventSpyResult.data.meta.currentValue === 10001);
}); });
it('Does not add ARR milestone for out of scope currency', async function () { it('Does not add ARR milestone for out of scope currency', async function () {

View file

@ -50,8 +50,7 @@ class SlackNotifications {
* @param {import('@tryghost/milestones/lib/InMemoryMilestoneRepository').Milestone} eventData.milestone * @param {import('@tryghost/milestones/lib/InMemoryMilestoneRepository').Milestone} eventData.milestone
* @param {object} [eventData.meta] * @param {object} [eventData.meta]
* @param {'import'|'email'|'tooFar'} [eventData.meta.reason] * @param {'import'|'email'|'tooFar'} [eventData.meta.reason]
* @param {number} [eventData.meta.currentARR] * @param {number} [eventData.meta.currentValue]
* @param {number} [eventData.meta.currentMembers]
* *
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
@ -79,10 +78,10 @@ class SlackNotifications {
] ]
}; };
if (meta?.currentARR) { if (meta?.currentValue) {
valueSection.fields.push({ valueSection.fields.push({
type: 'mrkdwn', type: 'mrkdwn',
text: `*Current ARR:*\n${this.#getFormattedAmount({amount: meta.currentARR, currency: milestone?.currency})}` text: `*Current ARR:*\n${this.#getFormattedAmount({amount: meta.currentValue, currency: milestone?.currency})}`
}); });
} }
} else { } else {
@ -95,10 +94,10 @@ class SlackNotifications {
} }
] ]
}; };
if (meta?.currentMembers) { if (meta?.currentValue) {
valueSection.fields.push({ valueSection.fields.push({
type: 'mrkdwn', type: 'mrkdwn',
text: `*Current Members:*\n${this.#getFormattedAmount({amount: meta.currentMembers})}` text: `*Current Members:*\n${this.#getFormattedAmount({amount: meta.currentValue})}`
}); });
} }
} }

View file

@ -7,8 +7,7 @@ const {MilestoneCreatedEvent} = require('@tryghost/milestones');
/** /**
* @typedef {object} meta * @typedef {object} meta
* @prop {'import'|'email'} [reason] * @prop {'import'|'email'} [reason]
* @prop {number} [currentARR] * @prop {number} [currentValue]
* @prop {number} [currentMembers]
*/ */
/** /**

View file

@ -115,7 +115,7 @@ describe('SlackNotifications', function () {
value: 50000 value: 50000
}, },
meta: { meta: {
currentMembers: 59857, currentValue: 59857,
reason: 'import' reason: 'import'
} }
}); });
@ -184,7 +184,7 @@ describe('SlackNotifications', function () {
value: 1000 value: 1000
}, },
meta: { meta: {
currentARR: 1005, currentValue: 1005,
reason: 'email' reason: 'email'
} }
}); });

View file

@ -81,7 +81,7 @@ describe('SlackNotificationsService', function () {
emailSentAt: new Date() emailSentAt: new Date()
}, },
meta: { meta: {
currentARR: 1398 currentValue: 1398
} }
})); }));