From 0afd3de9779e2abe10deede24626a3cbe6b15e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Fri, 9 Sep 2022 10:59:41 +0200 Subject: [PATCH] feat(api-gateway): add tracking general activity for free and paid users breakdown --- .pnp.cjs | 1 + .../src/Domain/Analytics/AnalyticsActivity.ts | 2 ++ packages/api-gateway/package.json | 1 + .../src/Controller/AuthMiddleware.ts | 18 +++++++++++++++--- yarn.lock | 3 ++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index f5960b887..6dafb362c 100755 --- a/.pnp.cjs +++ b/.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"],\ diff --git a/packages/analytics/src/Domain/Analytics/AnalyticsActivity.ts b/packages/analytics/src/Domain/Analytics/AnalyticsActivity.ts index 54170a074..7e71e0849 100644 --- a/packages/analytics/src/Domain/Analytics/AnalyticsActivity.ts +++ b/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', diff --git a/packages/api-gateway/package.json b/packages/api-gateway/package.json index 712122cd9..ed5a9f6b7 100644 --- a/packages/api-gateway/package.json +++ b/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:*", diff --git a/packages/api-gateway/src/Controller/AuthMiddleware.ts b/packages/api-gateway/src/Controller/AuthMiddleware.ts index 8970f72de..60f809aad 100644 --- a/packages/api-gateway/src/Controller/AuthMiddleware.ts +++ b/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 = 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({ diff --git a/yarn.lock b/yarn.lock index d7c5ab147..8f03dc23b 100644 --- a/yarn.lock +++ b/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: