Browse Source

feat(api-gateway): add tracking general activity for free and paid users breakdown

Karol Sójko 2 years ago
parent
commit
0afd3de977

+ 1 - 0
.pnp.cjs

@@ -2506,6 +2506,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
             ["@newrelic/winston-enricher", "virtual:04783e12400851b8a3d76e71495851cc94959db6e62f04cb0a31190080629440b182d8c8eb4d7f2b04e281912f2783a5fd4d2c3c6ab68d38b7097246c93f4c19#npm:4.0.0"],\
             ["@sentry/node", "npm:7.5.0"],\
             ["@standardnotes/analytics", "workspace:packages/analytics"],\
+            ["@standardnotes/common", "workspace:packages/common"],\
             ["@standardnotes/domain-events", "workspace:packages/domain-events"],\
             ["@standardnotes/domain-events-infra", "workspace:packages/domain-events-infra"],\
             ["@standardnotes/security", "workspace:packages/security"],\

+ 2 - 0
packages/analytics/src/Domain/Analytics/AnalyticsActivity.ts

@@ -1,5 +1,7 @@
 export enum AnalyticsActivity {
   GeneralActivity = 'general-activity',
+  GeneralActivityFreeUsers = 'general-activity-free-users',
+  GeneralActivityPaidUsers = 'general-activity-paid-users',
   EditingItems = 'editing-items',
   CheckingIntegrity = 'checking-integrity',
   Login = 'login',

+ 1 - 0
packages/api-gateway/package.json

@@ -25,6 +25,7 @@
     "@newrelic/winston-enricher": "^4.0.0",
     "@sentry/node": "^7.3.0",
     "@standardnotes/analytics": "workspace:*",
+    "@standardnotes/common": "workspace:^",
     "@standardnotes/domain-events": "workspace:*",
     "@standardnotes/domain-events-infra": "workspace:*",
     "@standardnotes/security": "workspace:*",

+ 15 - 3
packages/api-gateway/src/Controller/AuthMiddleware.ts

@@ -1,4 +1,5 @@
 import { CrossServiceTokenData } from '@standardnotes/security'
+import { RoleName } from '@standardnotes/common'
 import { AnalyticsActivity, AnalyticsStoreInterface, Period } from '@standardnotes/analytics'
 import { TimerInterface } from '@standardnotes/time'
 import { NextFunction, Request, Response } from 'express'
@@ -75,9 +76,20 @@ export class AuthMiddleware extends BaseMiddleware {
 
       const decodedToken = <CrossServiceTokenData>verify(crossServiceToken, this.jwtSecret, { algorithms: ['HS256'] })
 
-      await this.analyticsStore.markActivity([AnalyticsActivity.GeneralActivity], decodedToken.analyticsId as number, [
-        Period.Today,
-      ])
+      response.locals.freeUser =
+        decodedToken.roles.length === 1 &&
+        decodedToken.roles.find((role) => role.name === RoleName.CoreUser) !== undefined
+
+      await this.analyticsStore.markActivity(
+        [
+          AnalyticsActivity.GeneralActivity,
+          response.locals.freeUser
+            ? AnalyticsActivity.GeneralActivityFreeUsers
+            : AnalyticsActivity.GeneralActivityPaidUsers,
+        ],
+        decodedToken.analyticsId as number,
+        [Period.Today],
+      )
 
       if (this.crossServiceTokenCacheTTL && !crossServiceTokenFetchedFromCache) {
         await this.crossServiceTokenCache.set({

+ 2 - 1
yarn.lock

@@ -1767,6 +1767,7 @@ __metadata:
     "@newrelic/winston-enricher": ^4.0.0
     "@sentry/node": ^7.3.0
     "@standardnotes/analytics": "workspace:*"
+    "@standardnotes/common": "workspace:^"
     "@standardnotes/domain-events": "workspace:*"
     "@standardnotes/domain-events-infra": "workspace:*"
     "@standardnotes/security": "workspace:*"
@@ -1884,7 +1885,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@standardnotes/common@^1.19.1, @standardnotes/common@^1.23.1, @standardnotes/common@workspace:*, @standardnotes/common@workspace:packages/common":
+"@standardnotes/common@^1.19.1, @standardnotes/common@^1.23.1, @standardnotes/common@workspace:*, @standardnotes/common@workspace:^, @standardnotes/common@workspace:packages/common":
   version: 0.0.0-use.local
   resolution: "@standardnotes/common@workspace:packages/common"
   dependencies: