From 473b07c3f2e91ee6ab9a0fef333b31132bb2183c Mon Sep 17 00:00:00 2001 From: Eric Mc Sween <5454374+emcsween@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:12:16 -0500 Subject: [PATCH] Merge pull request #21935 from overleaf/em-recurly-event-ai-add-on Add an hasAiAddOn property to Recurly events sent to analytics GitOrigin-RevId: a3cfc706001bab3ef06bfaf64d69533b1bc9840a --- .../Subscription/RecurlyEventHandler.js | 24 ++++++++++++++----- .../Subscription/RecurlyEventHandlerTests.js | 7 ++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/services/web/app/src/Features/Subscription/RecurlyEventHandler.js b/services/web/app/src/Features/Subscription/RecurlyEventHandler.js index 30b780221e..dd7c7e3ac0 100644 --- a/services/web/app/src/Features/Subscription/RecurlyEventHandler.js +++ b/services/web/app/src/Features/Subscription/RecurlyEventHandler.js @@ -1,5 +1,6 @@ const AnalyticsManager = require('../Analytics/AnalyticsManager') const SubscriptionEmailHandler = require('./SubscriptionEmailHandler') +const { AI_ADD_ON_CODE } = require('./RecurlyEntities') const { ObjectId } = require('mongodb-legacy') const INVOICE_SUBSCRIPTION_LIMIT = 10 @@ -49,7 +50,7 @@ async function sendRecurlyAnalyticsEvent(event, eventData) { } async function _sendSubscriptionStartedEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -58,6 +59,7 @@ async function _sendSubscriptionStartedEvent(userId, eventData) { plan_code: planCode, quantity, is_trial: isTrial, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -83,7 +85,7 @@ async function _sendSubscriptionStartedEvent(userId, eventData) { } async function _sendSubscriptionUpdatedEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -92,6 +94,7 @@ async function _sendSubscriptionUpdatedEvent(userId, eventData) { plan_code: planCode, quantity, is_trial: isTrial, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -113,7 +116,7 @@ async function _sendSubscriptionUpdatedEvent(userId, eventData) { } async function _sendSubscriptionCancelledEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -122,6 +125,7 @@ async function _sendSubscriptionCancelledEvent(userId, eventData) { plan_code: planCode, quantity, is_trial: isTrial, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -138,7 +142,7 @@ async function _sendSubscriptionCancelledEvent(userId, eventData) { } async function _sendSubscriptionExpiredEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -147,6 +151,7 @@ async function _sendSubscriptionExpiredEvent(userId, eventData) { plan_code: planCode, quantity, is_trial: isTrial, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -168,7 +173,7 @@ async function _sendSubscriptionExpiredEvent(userId, eventData) { } async function _sendSubscriptionRenewedEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -177,6 +182,7 @@ async function _sendSubscriptionRenewedEvent(userId, eventData) { plan_code: planCode, quantity, is_trial: isTrial, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -198,7 +204,7 @@ async function _sendSubscriptionRenewedEvent(userId, eventData) { } async function _sendSubscriptionReactivatedEvent(userId, eventData) { - const { planCode, quantity, state, isTrial, subscriptionId } = + const { planCode, quantity, state, isTrial, hasAiAddOn, subscriptionId } = _getSubscriptionData(eventData) AnalyticsManager.recordEventForUserInBackground( userId, @@ -206,6 +212,7 @@ async function _sendSubscriptionReactivatedEvent(userId, eventData) { { plan_code: planCode, quantity, + has_ai_add_on: hasAiAddOn, subscriptionId, } ) @@ -281,12 +288,17 @@ function _getSubscriptionData(eventData) { eventData.subscription.current_period_started_at && eventData.subscription.trial_started_at.getTime() === eventData.subscription.current_period_started_at.getTime() + const hasAiAddOn = + eventData.subscription.subscription_add_ons?.some( + addOn => addOn.add_on_code === AI_ADD_ON_CODE + ) ?? false return { planCode: eventData.subscription.plan.plan_code, quantity: eventData.subscription.quantity, state: eventData.subscription.state, subscriptionId: eventData.subscription.uuid, isTrial, + hasAiAddOn, } } diff --git a/services/web/test/unit/src/Subscription/RecurlyEventHandlerTests.js b/services/web/test/unit/src/Subscription/RecurlyEventHandlerTests.js index 55d7cab65d..4928f81e0d 100644 --- a/services/web/test/unit/src/Subscription/RecurlyEventHandlerTests.js +++ b/services/web/test/unit/src/Subscription/RecurlyEventHandlerTests.js @@ -60,6 +60,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 1, is_trial: true, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -113,6 +114,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 3, is_trial: false, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -145,6 +147,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 1, is_trial: true, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -182,6 +185,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 1, is_trial: true, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -213,6 +217,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 1, is_trial: true, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -249,6 +254,7 @@ describe('RecurlyEventHandler', function () { plan_code: this.planCode, quantity: 1, is_trial: true, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } ) @@ -266,6 +272,7 @@ describe('RecurlyEventHandler', function () { { plan_code: this.planCode, quantity: 1, + has_ai_add_on: false, subscriptionId: this.eventData.subscription.uuid, } )