Skip to content

Commit 7dbf102

Browse files
committed
fix(analytics): linting, send needed user values
1 parent a332a6c commit 7dbf102

37 files changed

+188
-100
lines changed

Diff for: website/common/script/fns/randomDrop.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import isFunction from 'lodash/isFunction';
33
import min from 'lodash/min';
44
import reduce from 'lodash/reduce';
55
import filter from 'lodash/filter';
6+
import pick from 'lodash/pick';
67
import pickBy from 'lodash/pickBy';
78
import size from 'lodash/size';
89
import moment from 'moment';
@@ -159,6 +160,7 @@ export default function randomDrop (user, options, req = {}, analytics) {
159160

160161
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
161162
analytics.track('dropped item', {
163+
user: pick(user, ['preferences', 'registeredThrough']),
162164
uuid: user._id,
163165
itemKey: drop.key,
164166
category: 'behavior',

Diff for: website/common/script/libs/onboarding.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pick from 'lodash/pick';
2+
13
export function hasCompletedOnboarding (user) {
24
return (
35
user.achievements.createdTask === true
@@ -19,6 +21,7 @@ export function checkOnboardingStatus (user, req, analytics) {
1921
user.addNotification('ONBOARDING_COMPLETE');
2022
if (analytics) {
2123
analytics.track('onboarding complete', {
24+
user: pick(user, ['preferences', 'registeredThrough']),
2225
uuid: user._id,
2326
hitType: 'event',
2427
category: 'behavior',

Diff for: website/common/script/ops/buy/abstractBuyOperation.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* eslint-disable max-classes-per-file */
2-
import _merge from 'lodash/merge';
3-
import _get from 'lodash/get';
2+
import get from 'lodash/get';
3+
import merge from 'lodash/merge';
4+
import pick from 'lodash/pick';
45
import i18n from '../../i18n';
56
import {
67
NotAuthorized,
@@ -21,7 +22,7 @@ export class AbstractBuyOperation {
2122
this.req = req || {};
2223
this.analytics = analytics;
2324

24-
const quantity = _get(req, 'quantity');
25+
const quantity = get(req, 'quantity');
2526

2627
this.quantity = quantity ? Number(quantity) : 1;
2728
if (this.quantity < 1 || !Number.isInteger(this.quantity)) throw new BadRequest(this.i18n('invalidQuantity'));
@@ -112,8 +113,8 @@ export class AbstractBuyOperation {
112113

113114
sendToAnalytics (additionalData = {}) {
114115
// spread-operator produces an "unexpected token" error
115-
const analyticsData = _merge(additionalData, {
116-
// ...additionalData,
116+
const analyticsData = merge(additionalData, {
117+
user: pick(this.user, ['preferences', 'registeredThrough']),
117118
uuid: this.user._id,
118119
category: 'behavior',
119120
headers: this.req.headers,

Diff for: website/common/script/ops/buy/buyArmoire.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,12 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
6969
];
7070
}
7171

72-
_trackDropAnalytics (userId, key) {
72+
_trackDropAnalytics (user, key) {
7373
this.analytics.track(
7474
'Enchanted Armoire',
7575
{
76-
uuid: userId,
76+
user: pick(user, ['preferences', 'registeredThrough']),
77+
uuid: user._id,
7778
itemKey: key,
7879
category: 'behavior',
7980
headers: this.req.headers,
@@ -105,7 +106,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
105106
removeItemByPath(user, `gear.flat.${drop.key}`);
106107

107108
if (this.analytics) {
108-
this._trackDropAnalytics(user._id, drop.key);
109+
this._trackDropAnalytics(user, drop.key);
109110
}
110111

111112
const armoireResp = {
@@ -134,7 +135,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
134135
if (user.markModified) user.markModified('items.food');
135136

136137
if (this.analytics) {
137-
this._trackDropAnalytics(user._id, drop.key);
138+
this._trackDropAnalytics(user, drop.key);
138139
}
139140
return {
140141
message: this.i18n('armoireFood', {

Diff for: website/common/script/ops/buy/buyMysterySet.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import get from 'lodash/get';
22
import each from 'lodash/each';
3+
import pick from 'lodash/pick';
34
import i18n from '../../i18n';
45
import content from '../../content/index';
56
import {
@@ -36,6 +37,7 @@ export default async function buyMysterySet (user, req = {}, analytics) {
3637

3738
if (analytics) {
3839
analytics.track('buy', {
40+
user: pick(user, ['preferences', 'registeredThrough']),
3941
uuid: user._id,
4042
itemKey: mysterySet.key,
4143
itemType: 'Subscriber Gear',

Diff for: website/common/script/ops/buy/hourglassPurchase.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import get from 'lodash/get';
22
import includes from 'lodash/includes';
33
import keys from 'lodash/keys';
4+
import pick from 'lodash/pick';
45
import i18n from '../../i18n';
56
import content from '../../content/index';
67
import {
@@ -95,6 +96,7 @@ export default async function purchaseHourglass (user, req = {}, analytics, quan
9596

9697
if (analytics) {
9798
analytics.track('buy', {
99+
user: pick(user, ['preferences', 'registeredThrough']),
98100
uuid: user._id,
99101
itemKey: key,
100102
itemType: type,

Diff for: website/common/script/ops/buy/purchase.js

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ export default async function purchase (user, req = {}, analytics) {
132132
/* eslint-enable no-await-in-loop */
133133
if (analytics) {
134134
analytics.track('buy', {
135+
user: pick(user, ['preferences', 'registeredThrough']),
135136
uuid: user._id,
136137
itemKey: key,
137138
itemType: type,

Diff for: website/common/script/ops/changeClass.js

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export default async function changeClass (user, req = {}, analytics) {
7070

7171
if (analytics) {
7272
analytics.track('change class', {
73+
user: pick(user, ['preferences', 'registeredThrough']),
7374
uuid: user._id,
7475
class: klass,
7576
currency: balanceRemoved === 0 ? 'Free' : 'Gems',

Diff for: website/common/script/ops/feed.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import forEach from 'lodash/forEach';
22
import findIndex from 'lodash/findIndex';
33
import get from 'lodash/get';
44
import keys from 'lodash/keys';
5+
import pick from 'lodash/pick';
56
import upperFirst from 'lodash/upperFirst';
67
import moment from 'moment';
78
import i18n from '../i18n';
@@ -142,6 +143,7 @@ export default function feed (user, req = {}, analytics) {
142143

143144
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
144145
analytics.track('pet feed', {
146+
user: pick(user, ['preferences', 'registeredThrough']),
145147
uuid: user._id,
146148
foodKey: food.key,
147149
petKey: pet.key,

Diff for: website/common/script/ops/hatch.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import findIndex from 'lodash/findIndex';
22
import forEach from 'lodash/forEach';
33
import get from 'lodash/get';
44
import keys from 'lodash/keys';
5+
import pick from 'lodash/pick';
56
import upperFirst from 'lodash/upperFirst';
67
import moment from 'moment';
78
import i18n from '../i18n';
@@ -153,6 +154,7 @@ export default function hatch (user, req = {}, analytics) {
153154

154155
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
155156
analytics.track('pet hatch', {
157+
user: pick(user, ['preferences', 'registeredThrough']),
156158
uuid: user._id,
157159
petKey: pet,
158160
category: 'behavior',

Diff for: website/common/script/ops/rebirth.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import each from 'lodash/each';
2+
import pick from 'lodash/pick';
23
import i18n from '../i18n';
34
import { capByLevel } from '../statHelpers';
45
import { MAX_LEVEL } from '../constants';
@@ -22,6 +23,7 @@ export default async function rebirth (user, tasks = [], req = {}, analytics) {
2223

2324
const analyticsData = {
2425
uuid: user._id,
26+
user: pick(user, ['preferences', 'registeredThrough']),
2527
category: 'behavior',
2628
};
2729

Diff for: website/common/script/ops/releaseMounts.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pick from 'lodash/pick';
12
import content from '../content/index';
23
import { mountMasterProgress } from '../count';
34
import i18n from '../i18n';
@@ -43,6 +44,7 @@ export default async function releaseMounts (user, req = {}, analytics) {
4344

4445
if (analytics) {
4546
analytics.track('release mounts', {
47+
user: pick(user, ['preferences', 'registeredThrough']),
4648
uuid: user._id,
4749
currency: 'Gems',
4850
gemCost: 4,

Diff for: website/common/script/ops/releasePets.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pick from 'lodash/pick';
12
import content from '../content/index';
23
import { beastMasterProgress } from '../count';
34
import i18n from '../i18n';
@@ -43,6 +44,7 @@ export default function releasePets (user, req = {}, analytics) {
4344

4445
if (analytics) {
4546
analytics.track('release pets', {
47+
user: pick(user, ['preferences', 'registeredThrough']),
4648
uuid: user._id,
4749
currency: 'Gems',
4850
gemCost: 4,

Diff for: website/common/script/ops/reroll.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import each from 'lodash/each';
2+
import pick from 'lodash/pick';
23
import i18n from '../i18n';
34
import {
45
NotAuthorized,
@@ -23,6 +24,7 @@ export default async function reroll (user, tasks = [], req = {}, analytics) {
2324

2425
if (analytics) {
2526
analytics.track('Fortify Potion', {
27+
user: pick(user, ['preferences', 'registeredThrough']),
2628
uuid: user._id,
2729
currency: 'Gems',
2830
gemCost: 4,

Diff for: website/common/script/ops/revive.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import merge from 'lodash/merge';
2+
import pick from 'lodash/pick';
23
import reduce from 'lodash/reduce';
34
import each from 'lodash/each';
45
import i18n from '../i18n';
@@ -111,9 +112,9 @@ export default function revive (user, req = {}, analytics) {
111112

112113
if (analytics) {
113114
analytics.track('Death', {
115+
user: pick(user, ['preferences', 'registeredThrough']),
114116
uuid: user._id,
115117
lostItem,
116-
gaLabel: lostItem,
117118
category: 'behavior',
118119
headers: req.headers,
119120
});

Diff for: website/common/script/ops/sleep.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import pick from 'lodash/pick';
2+
13
export function sleep (user, req = {}, analytics) {
24
user.preferences.sleep = !user.preferences.sleep;
35

46
if (analytics) {
57
analytics.track('sleep', {
8+
user: pick(user, ['preferences', 'registeredThrough']),
69
uuid: user._id,
710
status: user.preferences.sleep,
811
category: 'behavior',

Diff for: website/common/script/ops/unlock.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import get from 'lodash/get';
2+
import pick from 'lodash/pick';
23
import setWith from 'lodash/setWith';
34
import i18n from '../i18n';
45
import { NotAuthorized, BadRequest } from '../libs/errors';
@@ -317,6 +318,7 @@ export default async function unlock (user, req = {}, analytics) {
317318

318319
if (analytics) {
319320
analytics.track('buy', {
321+
user: pick(user, ['preferences', 'registeredThrough']),
320322
uuid: user._id,
321323
itemKey: path,
322324
itemType: 'customization',

Diff for: website/server/controllers/api-v3/auth.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import validator from 'validator';
22
import moment from 'moment';
3+
import pick from 'lodash/pick';
34
import sortBy from 'lodash/sortBy';
45
import nconf from 'nconf';
56
import {
@@ -125,9 +126,9 @@ api.loginLocal = {
125126
}
126127

127128
res.analytics.track('login', {
128-
category: 'behaviour',
129+
user: pick(user, ['preferences', 'registeredThrough']),
130+
category: 'behavior',
129131
type: 'local',
130-
gaLabel: 'local',
131132
uuid: user._id,
132133
headers: req.headers,
133134
});

Diff for: website/server/controllers/api-v3/challenges.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import _ from 'lodash';
21
import cloneDeep from 'lodash/cloneDeep';
2+
import escapeRegExp from 'lodash/escapeRegExp';
3+
import merge from 'lodash/merge';
4+
import pick from 'lodash/pick';
5+
import reduce from 'lodash/reduce';
6+
import times from 'lodash/times';
37
import { authWithHeaders, authWithSession } from '../../middlewares/auth';
48
import { model as Challenge } from '../../models/challenge';
59
import bannedWords from '../../libs/bannedWords';
@@ -287,6 +291,7 @@ api.createChallenge = {
287291
response.group = getChallengeGroupResponse(group);
288292

289293
res.analytics.track('challenge create', {
294+
user: pick(user, ['preferences', 'registeredThrough']),
290295
uuid: user._id,
291296
hitType: 'event',
292297
category: 'behavior',
@@ -355,6 +360,7 @@ api.joinChallenge = {
355360
response.leader = chalLeader ? chalLeader.toJSON({ minimize: true }) : null;
356361

357362
res.analytics.track('challenge join', {
363+
user: pick(user, ['preferences', 'registeredThrough']),
358364
uuid: user._id,
359365
hitType: 'event',
360366
category: 'behavior',
@@ -405,6 +411,7 @@ api.leaveChallenge = {
405411
await challenge.unlinkTasks(user, keep);
406412

407413
res.analytics.track('challenge leave', {
414+
user: pick(user, ['preferences', 'registeredThrough']),
408415
uuid: user._id,
409416
hitType: 'event',
410417
category: 'behavior',
@@ -519,7 +526,7 @@ api.getUserChallenges = {
519526

520527
if (search) {
521528
const searchOr = { $or: [] };
522-
const searchWords = _.escapeRegExp(search).split(' ').join('|');
529+
const searchWords = escapeRegExp(search).split(' ').join('|');
523530
const searchQuery = { $regex: new RegExp(`${searchWords}`, 'i') };
524531
searchOr.$or.push({ name: searchQuery });
525532
searchOr.$or.push({ description: searchQuery });
@@ -775,14 +782,14 @@ api.exportChallengeCsv = {
775782

776783
// The first row is going to be UUID name Task Value Notes
777784
// repeated n times for the n challenge tasks
778-
const challengeTasks = _.reduce(
785+
const challengeTasks = reduce(
779786
challenge.tasksOrder.toObject(),
780787
(result, array) => result.concat(array),
781788
[],
782789
).sort();
783790
resArray.unshift(['UUID', 'Display Name', 'Username']);
784791

785-
_.times(challengeTasks.length, () => resArray[0].push('Task', 'Value', 'Notes', 'Streak'));
792+
times(challengeTasks.length, () => resArray[0].push('Task', 'Value', 'Notes', 'Streak'));
786793

787794
// Remove lines for users without tasks info
788795
resArray = resArray.filter(line => {
@@ -847,7 +854,7 @@ api.updateChallenge = {
847854
if (!group || !challenge.canView(user, group)) throw new NotFound(res.t('challengeNotFound'));
848855
if (!challenge.canModify(user)) throw new NotAuthorized(res.t('onlyLeaderUpdateChal'));
849856
group.purchased = undefined;
850-
_.merge(challenge, Challenge.sanitizeUpdate(req.body));
857+
merge(challenge, Challenge.sanitizeUpdate(req.body));
851858

852859
const savedChal = await challenge.save();
853860
const response = savedChal.toJSON();
@@ -889,6 +896,7 @@ api.deleteChallenge = {
889896
await challenge.closeChal({ broken: 'CHALLENGE_DELETED' });
890897

891898
res.analytics.track('challenge delete', {
899+
user: pick(user, ['preferences', 'registeredThrough']),
892900
uuid: user._id,
893901
hitType: 'event',
894902
category: 'behavior',
@@ -949,6 +957,7 @@ api.selectChallengeWinner = {
949957
await challenge.closeChal({ broken: 'CHALLENGE_CLOSED', winner });
950958

951959
res.analytics.track('challenge close', {
960+
user: pick(user, ['preferences', 'registeredThrough']),
952961
uuid: user._id,
953962
hitType: 'event',
954963
category: 'behavior',

Diff for: website/server/controllers/api-v3/chat.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pick from 'lodash/pick';
12
import moment from 'moment';
23
import nconf from 'nconf';
34
import { authWithHeaders } from '../../middlewares/auth';
@@ -186,6 +187,7 @@ api.postChat = {
186187
// Check if account is newer than the minimum age for chat participation
187188
if (moment().diff(user.auth.timestamps.created, 'minutes') < ACCOUNT_MIN_CHAT_AGE) {
188189
analytics.track('chat age error', {
190+
user: pick(user, ['preferences', 'registeredThrough']),
189191
uuid: user._id,
190192
hitType: 'event',
191193
category: 'behavior',
@@ -237,6 +239,7 @@ api.postChat = {
237239
await Promise.all(toSave);
238240

239241
const analyticsObject = {
242+
user: pick(user, ['preferences', 'registeredThrough']),
240243
uuid: user._id,
241244
hitType: 'event',
242245
category: 'behavior',

0 commit comments

Comments
 (0)