06b7e49e98
* Store view counts & last viewed time * Schedule updating user recommendations. Compute using tf-idf. * Update contract's lastBetTime and lastCommentTime on new bets and comments. * Remove contract's lastUpdatedTime * Remove folds activity feed * Implement getFeed cloud function * Hook up client to use getFeed * Script to cache viewCounts and lastViewTime * Batched wait all userRecommendations * Cache view script runs on all users * Update user feed each hour and get feed from cache doc. * Delete view cache script * Update feed script * Tweak feed algorithm * Compute recommendation scores from updateUserFeed * Disable lastViewedScore factor * Update lastCommentTime script * Comment out console.log * Fix timeout issue by calling new cloud functions with part of the work. * Listen for contract updates to feed. * Handle new user: use default feed of top markets this week * Track lastUpdatedTime * Tweak logic of calling cloud functions in batches * Tweak cloud function batching
25 lines
737 B
TypeScript
25 lines
737 B
TypeScript
import * as functions from 'firebase-functions'
|
|
import * as admin from 'firebase-admin'
|
|
import { View } from '../../common/tracking'
|
|
|
|
const firestore = admin.firestore()
|
|
|
|
export const onView = functions.firestore
|
|
.document('private-users/{userId}/views/{viewId}')
|
|
.onCreate(async (snapshot, context) => {
|
|
const { userId } = context.params
|
|
|
|
const { contractId, timestamp } = snapshot.data() as View
|
|
|
|
await firestore
|
|
.doc(`private-users/${userId}/cache/viewCounts`)
|
|
.set(
|
|
{ [contractId]: admin.firestore.FieldValue.increment(1) },
|
|
{ merge: true }
|
|
)
|
|
|
|
await firestore
|
|
.doc(`private-users/${userId}/cache/lastViewTime`)
|
|
.set({ [contractId]: timestamp }, { merge: true })
|
|
})
|