diff --git a/functions/src/index.ts b/functions/src/index.ts index 19a4a054..541d53ad 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -15,6 +15,7 @@ export * from './create-answer' export * from './on-create-comment' export * from './on-fold-follow' export * from './on-fold-delete' +export * from './on-view' export * from './unsubscribe' export * from './update-contract-metrics' export * from './update-user-metrics' diff --git a/functions/src/on-view.ts b/functions/src/on-view.ts new file mode 100644 index 00000000..3939d4d2 --- /dev/null +++ b/functions/src/on-view.ts @@ -0,0 +1,24 @@ +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}/cached/viewCounts`) + .set( + { [contractId]: admin.firestore.FieldValue.increment(1) }, + { merge: true } + ) + + await firestore + .doc(`private-users/${userId}/cached/lastViewed`) + .set({ [contractId]: timestamp }, { merge: true }) + })