properly update user properties in events

This commit is contained in:
Phillip Thelen
2025-09-04 12:57:35 +02:00
parent ddba450630
commit 2c7f6fd9e3
36 changed files with 52 additions and 52 deletions

View File

@@ -160,7 +160,7 @@ export default function randomDrop (user, options, req = {}, analytics) {
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) { if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
analytics.track('dropped item', { analytics.track('dropped item', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: drop.key, itemKey: drop.key,
category: 'behavior', category: 'behavior',

View File

@@ -21,7 +21,7 @@ export function checkOnboardingStatus (user, req, analytics) {
user.addNotification('ONBOARDING_COMPLETE'); user.addNotification('ONBOARDING_COMPLETE');
if (analytics) { if (analytics) {
analytics.track('onboarding complete', { analytics.track('onboarding complete', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -114,7 +114,7 @@ export class AbstractBuyOperation {
sendToAnalytics (additionalData = {}) { sendToAnalytics (additionalData = {}) {
// spread-operator produces an "unexpected token" error // spread-operator produces an "unexpected token" error
const analyticsData = merge(additionalData, { const analyticsData = merge(additionalData, {
user: pick(this.user, ['preferences', 'registeredThrough']), user: this.user,
uuid: this.user._id, uuid: this.user._id,
category: 'behavior', category: 'behavior',
headers: this.req.headers, headers: this.req.headers,

View File

@@ -73,7 +73,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
this.analytics.track( this.analytics.track(
'Enchanted Armoire', 'Enchanted Armoire',
{ {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: key, itemKey: key,
category: 'behavior', category: 'behavior',

View File

@@ -37,7 +37,7 @@ export default async function buyMysterySet (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('buy', { analytics.track('buy', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: mysterySet.key, itemKey: mysterySet.key,
itemType: 'Subscriber Gear', itemType: 'Subscriber Gear',

View File

@@ -96,7 +96,7 @@ export default async function purchaseHourglass (user, req = {}, analytics, quan
if (analytics) { if (analytics) {
analytics.track('buy', { analytics.track('buy', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: key, itemKey: key,
itemType: type, itemType: type,

View File

@@ -132,7 +132,7 @@ export default async function purchase (user, req = {}, analytics) {
/* eslint-enable no-await-in-loop */ /* eslint-enable no-await-in-loop */
if (analytics) { if (analytics) {
analytics.track('buy', { analytics.track('buy', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: key, itemKey: key,
itemType: type, itemType: type,

View File

@@ -70,7 +70,7 @@ export default async function changeClass (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('change class', { analytics.track('change class', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
class: klass, class: klass,
currency: balanceRemoved === 0 ? 'Free' : 'Gems', currency: balanceRemoved === 0 ? 'Free' : 'Gems',

View File

@@ -143,7 +143,7 @@ export default function feed (user, req = {}, analytics) {
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) { if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
analytics.track('pet feed', { analytics.track('pet feed', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
foodKey: food.key, foodKey: food.key,
petKey: pet.key, petKey: pet.key,

View File

@@ -154,7 +154,7 @@ export default function hatch (user, req = {}, analytics) {
if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) { if (analytics && moment().diff(user.auth.timestamps.created, 'days') < 7) {
analytics.track('pet hatch', { analytics.track('pet hatch', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
petKey: pet, petKey: pet,
category: 'behavior', category: 'behavior',

View File

@@ -23,7 +23,7 @@ export default async function rebirth (user, tasks = [], req = {}, analytics) {
const analyticsData = { const analyticsData = {
uuid: user._id, uuid: user._id,
user: pick(user, ['preferences', 'registeredThrough']), user,
category: 'behavior', category: 'behavior',
}; };

View File

@@ -44,7 +44,7 @@ export default async function releaseMounts (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('release mounts', { analytics.track('release mounts', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
currency: 'Gems', currency: 'Gems',
gemCost: 4, gemCost: 4,

View File

@@ -44,7 +44,7 @@ export default function releasePets (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('release pets', { analytics.track('release pets', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
currency: 'Gems', currency: 'Gems',
gemCost: 4, gemCost: 4,

View File

@@ -24,7 +24,7 @@ export default async function reroll (user, tasks = [], req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('Fortify Potion', { analytics.track('Fortify Potion', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
currency: 'Gems', currency: 'Gems',
gemCost: 4, gemCost: 4,

View File

@@ -112,7 +112,7 @@ export default function revive (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('Death', { analytics.track('Death', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
lostItem, lostItem,
category: 'behavior', category: 'behavior',

View File

@@ -5,7 +5,7 @@ export function sleep (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('sleep', { analytics.track('sleep', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
status: user.preferences.sleep, status: user.preferences.sleep,
category: 'behavior', category: 'behavior',

View File

@@ -318,7 +318,7 @@ export default async function unlock (user, req = {}, analytics) {
if (analytics) { if (analytics) {
analytics.track('buy', { analytics.track('buy', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
itemKey: path, itemKey: path,
itemType: 'customization', itemType: 'customization',

View File

@@ -128,7 +128,7 @@ api.loginLocal = {
await user.save(); await user.save();
res.analytics.track('login', { res.analytics.track('login', {
user: pick(user, ['preferences', 'registeredThrough']), user,
category: 'behavior', category: 'behavior',
type: 'local', type: 'local',
uuid: user._id, uuid: user._id,

View File

@@ -291,7 +291,7 @@ api.createChallenge = {
response.group = getChallengeGroupResponse(group); response.group = getChallengeGroupResponse(group);
res.analytics.track('challenge create', { res.analytics.track('challenge create', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -360,7 +360,7 @@ api.joinChallenge = {
response.leader = chalLeader ? chalLeader.toJSON({ minimize: true }) : null; response.leader = chalLeader ? chalLeader.toJSON({ minimize: true }) : null;
res.analytics.track('challenge join', { res.analytics.track('challenge join', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -411,7 +411,7 @@ api.leaveChallenge = {
await challenge.unlinkTasks(user, keep); await challenge.unlinkTasks(user, keep);
res.analytics.track('challenge leave', { res.analytics.track('challenge leave', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -896,7 +896,7 @@ api.deleteChallenge = {
await challenge.closeChal({ broken: 'CHALLENGE_DELETED' }); await challenge.closeChal({ broken: 'CHALLENGE_DELETED' });
res.analytics.track('challenge delete', { res.analytics.track('challenge delete', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -957,7 +957,7 @@ api.selectChallengeWinner = {
await challenge.closeChal({ broken: 'CHALLENGE_CLOSED', winner }); await challenge.closeChal({ broken: 'CHALLENGE_CLOSED', winner });
res.analytics.track('challenge close', { res.analytics.track('challenge close', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -187,7 +187,7 @@ api.postChat = {
// Check if account is newer than the minimum age for chat participation // Check if account is newer than the minimum age for chat participation
if (moment().diff(user.auth.timestamps.created, 'minutes') < ACCOUNT_MIN_CHAT_AGE) { if (moment().diff(user.auth.timestamps.created, 'minutes') < ACCOUNT_MIN_CHAT_AGE) {
analytics.track('chat age error', { analytics.track('chat age error', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -239,7 +239,7 @@ api.postChat = {
await Promise.all(toSave); await Promise.all(toSave);
const analyticsObject = { const analyticsObject = {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -169,7 +169,7 @@ api.createGroup = {
}; };
const analyticsObject = { const analyticsObject = {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -220,7 +220,7 @@ api.createGroupPlan = {
const savedGroup = results[1]; const savedGroup = results[1];
res.analytics.track('join group', { res.analytics.track('join group', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -705,7 +705,7 @@ api.joinGroup = {
promises.push(group.save()); promises.push(group.save());
const analyticsObject = { const analyticsObject = {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -737,7 +737,7 @@ api.transferGems = {
if (res.analytics) { if (res.analytics) {
res.analytics.track('transfer gems', { res.analytics.track('transfer gems', {
user: pick(sender, ['preferences', 'registeredThrough']), user,
uuid: sender._id, uuid: sender._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -168,7 +168,7 @@ api.inviteToQuest = {
// track that the inviting user has accepted the quest // track that the inviting user has accepted the quest
analytics.track('quest', { analytics.track('quest', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
category: 'behavior', category: 'behavior',
headers: req.headers, headers: req.headers,
@@ -233,7 +233,7 @@ api.acceptQuest = {
// track that a user has accepted the quest // track that a user has accepted the quest
analytics.track('quest', { analytics.track('quest', {
user: pick(user, ['preferences', 'registeredThrough']), user,
category: 'behavior', category: 'behavior',
owner: false, owner: false,
response: 'accept', response: 'accept',
@@ -298,7 +298,7 @@ api.rejectQuest = {
res.respond(200, savedGroup.quest); res.respond(200, savedGroup.quest);
analytics.track('quest', { analytics.track('quest', {
user: pick(user, ['preferences', 'registeredThrough']), user,
category: 'behavior', category: 'behavior',
owner: false, owner: false,
response: 'reject', response: 'reject',
@@ -362,7 +362,7 @@ api.forceStart = {
res.respond(200, savedGroup.quest); res.respond(200, savedGroup.quest);
analytics.track('quest', { analytics.track('quest', {
user: pick(user, ['preferences', 'registeredThrough']), user,
category: 'behavior', category: 'behavior',
owner: user._id === group.quest.leader, owner: user._id === group.quest.leader,
response: 'force-start', response: 'force-start',

View File

@@ -333,7 +333,7 @@ api.createChallengeTasks = {
tasks.forEach(task => { tasks.forEach(task => {
res.analytics.track('challenge task created', { res.analytics.track('challenge task created', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -703,7 +703,7 @@ api.updateTask = {
if (group) { if (group) {
res.analytics.track('task edit', { res.analytics.track('task edit', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -64,7 +64,7 @@ api.createGroupTasks = {
tasks.forEach(task => { tasks.forEach(task => {
res.analytics.track('team task created', { res.analytics.track('team task created', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -253,7 +253,7 @@ api.assignTask = {
res.respond(200, task); res.respond(200, task);
res.analytics.track('task assign', { res.analytics.track('task assign', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -326,7 +326,7 @@ api.deleteUser = {
} }
res.analytics.track('account delete', { res.analytics.track('account delete', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -219,7 +219,7 @@ async function registerLocal (req, res, { isV3 = false }) {
if (!existingUser) { if (!existingUser) {
res.analytics.track('register', { res.analytics.track('register', {
user: pick(savedUser, ['preferences', 'registeredThrough']), user: savedUser,
category: 'acquisition', category: 'acquisition',
type: 'local', type: 'local',
uuid: savedUser._id, uuid: savedUser._id,

View File

@@ -158,7 +158,7 @@ export async function loginSocial (req, res) { // eslint-disable-line import/pre
if (!existingUser) { if (!existingUser) {
res.analytics.track('register', { res.analytics.track('register', {
user: pick(savedUser, ['preferences', 'registeredThrough']), user: savedUser,
uuid: savedUser._id, uuid: savedUser._id,
category: 'acquisition', category: 'acquisition',
type: network, type: network,

View File

@@ -104,7 +104,7 @@ function trackCronAnalytics (analytics, user, _progress, options) {
analytics.track('Cron', { analytics.track('Cron', {
category: 'behavior', category: 'behavior',
uuid: user._id, uuid: user._id,
user: pick(user, ['preferences', 'registeredThrough']), user,
resting: user.preferences.sleep, resting: user.preferences.sleep,
cronCount: user.flags.cronCount, cronCount: user.flags.cronCount,
progressUp: Math.min(_progress.up, 900), progressUp: Math.min(_progress.up, 900),

View File

@@ -144,7 +144,7 @@ async function inviteByUUID (uuid, group, inviter, req, res) {
} }
const analyticsObject = { const analyticsObject = {
user: pick(inviter, ['preferences', 'registeredThrough']), user: inviter,
uuid: inviter._id, uuid: inviter._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -209,7 +209,7 @@ async function inviteByEmail (invite, group, inviter, req, res) {
if (!userIsUnsubscribed) sendTxnEmail(invite, `invite-friend${groupLabel}`, variables); if (!userIsUnsubscribed) sendTxnEmail(invite, `invite-friend${groupLabel}`, variables);
const analyticsObject = { const analyticsObject = {
user: pick(inviter, ['preferences', 'registeredThrough']), user: inviter,
uuid: inviter._id, uuid: inviter._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -247,7 +247,7 @@ async function inviteByUserName (username, group, inviter, req, res) {
} }
const analyticsObject = { const analyticsObject = {
user: pick(inviter, ['preferences', 'registeredThrough']), user: inviter,
uuid: inviter._id, uuid: inviter._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -115,7 +115,7 @@ export async function buyGems (data) {
if (!data.gift) txnEmail(data.user, 'donation'); if (!data.gift) txnEmail(data.user, 'donation');
analytics.trackPurchase({ analytics.trackPurchase({
user: pick(data.user, ['preferences', 'registeredThrough']), user: data.user,
uuid: data.user._id, uuid: data.user._id,
itemPurchased: 'Gems', itemPurchased: 'Gems',
sku: `${data.paymentMethod.toLowerCase()}-checkout`, sku: `${data.paymentMethod.toLowerCase()}-checkout`,

View File

@@ -32,7 +32,7 @@ async function buyGryphatrice (data) {
data.user.purchased.txnCount += 1; data.user.purchased.txnCount += 1;
analytics.trackPurchase({ analytics.trackPurchase({
user: pick(data.user, ['preferences', 'registeredThrough']), user: data.user,
uuid: data.user._id, uuid: data.user._id,
itemPurchased: 'Gryphatrice', itemPurchased: 'Gryphatrice',
sku: `${data.paymentMethod.toLowerCase()}-checkout`, sku: `${data.paymentMethod.toLowerCase()}-checkout`,

View File

@@ -465,7 +465,7 @@ async function cancelSubscription (data) {
analytics.track(cancelType, { analytics.track(cancelType, {
uuid: data.user._id, uuid: data.user._id,
user: pick(data.user, ['preferences', 'registeredThrough']), user: data.user,
groupId, groupId,
paymentMethod: data.paymentMethod, paymentMethod: data.paymentMethod,
headers: data.headers, headers: data.headers,

View File

@@ -516,7 +516,7 @@ async function scoreTask (user, task, direction, req, res) {
role = 'member'; role = 'member';
} }
res.analytics.track('team task scored', { res.analytics.track('team task scored', {
user: pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',

View File

@@ -117,7 +117,7 @@ export async function update (req, res, { isV3 = false }) {
user.invitations.party = {}; user.invitations.party = {};
user.invitations.parties = []; user.invitations.parties = [];
res.analytics.track('Starts Looking for Party', { res.analytics.track('Starts Looking for Party', {
user: _.pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -201,7 +201,7 @@ export async function update (req, res, { isV3 = false }) {
if (key === 'party.seeking' && val === null) { if (key === 'party.seeking' && val === null) {
user.party.seeking = undefined; user.party.seeking = undefined;
res.analytics.track('Leaves Looking for Party', { res.analytics.track('Leaves Looking for Party', {
user: _.pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',
@@ -292,7 +292,7 @@ export async function reset (req, res, { isV3 = false }) {
]); ]);
res.analytics.track('account reset', { res.analytics.track('account reset', {
user: _.pick(user, ['preferences', 'registeredThrough']), user,
uuid: user._id, uuid: user._id,
hitType: 'event', hitType: 'event',
category: 'behavior', category: 'behavior',