[web] avoid UserAnalyticsIdCache (#33121)

* [web] always provide an analyticsId when registering new users

* [web] add recordEventForMongoUser and use it during login

* [web] use recordEventForMongoUser/recordEventForSession where possible

* [web] use session cache for analyticsId when refreshing features

* [web] add setUserPropertyForMongoUser and use it where possible

* [web] use setUserPropertyForSessionInBackground where possible

* [web] use mongo user for analyticsId when setting utm user properties

* [web] admin-panel: user updated user when sending events

* [web] enforce labsProgram being populated on user object

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>

* [web] revert FeaturesUpdater.refreshFeatures change

* [web] labs: move session maintenance into handler

* [web] analyticsMiddleware: ensure that all users have labsProgram field

* [web] migrate a few more events to recordEventForSession

* [migrations] mark back-fill of db.users.analyticsId as required

* [web] setUserPropertyForSessionInBackground: throw early

---------

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
GitOrigin-RevId: 19c26bc36abd8c11f0a8f458d25abfb7cbda0bb7
This commit is contained in:
Jakob Ackermann
2026-06-17 08:08:32 +00:00
committed by Copybot
co-authored by Andrew Rumble
parent 7035a2e025
commit 6323fddbd8
37 changed files with 320 additions and 184 deletions
@@ -58,6 +58,8 @@ async function getIEEEUsers() {
_id: 1,
teamName: 1,
'member_details._id': 1,
'member_details.analyticsId': 1,
'member_details.labsProgram': 1,
'member_details.email': 1,
'member_details.emails.email': 1,
},
@@ -122,8 +124,8 @@ async function main() {
index = index + 1
if (COMMIT) {
await AnalyticsManager.setUserPropertyForUser(
userDetails._id.toString(),
await AnalyticsManager.setUserPropertyForMongoUser(
userDetails,
'ieee-retirement',
true
)