import * as admin from 'firebase-admin' import { initAdmin } from './script-init' initAdmin() import { getValues } from '../utils' import { Contract } from 'common/lib/contract' import { Comment } from 'common/lib/comment' import { uniq } from 'lodash' import { Bet } from 'common/lib/bet' import { DEV_HOUSE_LIQUIDITY_PROVIDER_ID, HOUSE_LIQUIDITY_PROVIDER_ID, } from 'common/lib/antes' const firestore = admin.firestore() async function backfillContractFollowers() { console.log('Backfilling contract followers') const contracts = await getValues( firestore.collection('contracts').where('isResolved', '==', false) ) let count = 0 for (const contract of contracts) { const comments = await getValues( firestore.collection('contracts').doc(contract.id).collection('comments') ) const commenterIds = uniq(comments.map((comment) => comment.userId)) const betsSnap = await firestore .collection(`contracts/${contract.id}/bets`) .get() const bets = betsSnap.docs.map((doc) => doc.data() as Bet) // filter bets for only users that have an amount invested still const bettorIds = uniq(bets.map((bet) => bet.userId)) const liquidityProviders = await firestore .collection(`contracts/${contract.id}/liquidity`) .get() const liquidityProvidersIds = uniq( liquidityProviders.docs.map((doc) => doc.data().userId) // exclude free market liquidity provider ).filter( (id) => id !== HOUSE_LIQUIDITY_PROVIDER_ID || id !== DEV_HOUSE_LIQUIDITY_PROVIDER_ID ) const followerIds = uniq([ ...commenterIds, ...bettorIds, ...liquidityProvidersIds, contract.creatorId, ]) for (const followerId of followerIds) { await firestore .collection(`contracts/${contract.id}/follows`) .doc(followerId) .set({ id: followerId, createdTime: Date.now() }) } // Perhaps handled by the trigger? // const followerCount = followerIds.length // await firestore // .collection(`contracts`) // .doc(contract.id) // .update({ followerCount: followerCount }) count += 1 if (count % 100 === 0) { console.log(`${count} contracts processed`) } } } if (require.main === module) { backfillContractFollowers() .then(() => process.exit()) .catch(console.log) }