2021-12-24 21:06:01 +00:00
|
|
|
import * as admin from 'firebase-admin'
|
|
|
|
import * as _ from 'lodash'
|
2022-01-10 21:07:57 +00:00
|
|
|
|
2022-01-30 21:11:01 +00:00
|
|
|
import { initAdmin } from './script-init'
|
2022-04-20 04:31:46 +00:00
|
|
|
initAdmin()
|
2022-01-30 21:11:01 +00:00
|
|
|
|
2022-05-15 17:39:42 +00:00
|
|
|
import { Bet } from '../../../common/bet'
|
|
|
|
import { Contract } from '../../../common/contract'
|
2021-12-24 21:06:01 +00:00
|
|
|
|
|
|
|
type DocRef = admin.firestore.DocumentReference
|
|
|
|
|
|
|
|
const firestore = admin.firestore()
|
|
|
|
|
|
|
|
async function migrateBet(contractRef: DocRef, bet: Bet) {
|
|
|
|
const { dpmWeight, amount, id } = bet as Bet & { dpmWeight: number }
|
|
|
|
const shares = dpmWeight + amount
|
|
|
|
|
|
|
|
await contractRef.collection('bets').doc(id).update({ shares })
|
|
|
|
}
|
|
|
|
|
|
|
|
async function migrateContract(contractRef: DocRef, contract: Contract) {
|
|
|
|
const bets = await contractRef
|
|
|
|
.collection('bets')
|
|
|
|
.get()
|
|
|
|
.then((snap) => snap.docs.map((bet) => bet.data() as Bet))
|
|
|
|
|
|
|
|
const totalShares = {
|
|
|
|
YES: _.sumBy(bets, (bet) => (bet.outcome === 'YES' ? bet.shares : 0)),
|
|
|
|
NO: _.sumBy(bets, (bet) => (bet.outcome === 'NO' ? bet.shares : 0)),
|
|
|
|
}
|
|
|
|
|
|
|
|
await contractRef.update({ totalShares })
|
|
|
|
}
|
|
|
|
|
|
|
|
async function migrateContracts() {
|
|
|
|
console.log('Migrating contracts')
|
|
|
|
|
|
|
|
const snapshot = await firestore.collection('contracts').get()
|
|
|
|
const contracts = snapshot.docs.map((doc) => doc.data() as Contract)
|
|
|
|
|
|
|
|
console.log('Loaded contracts', contracts.length)
|
|
|
|
|
|
|
|
for (const contract of contracts) {
|
|
|
|
const contractRef = firestore.doc(`contracts/${contract.id}`)
|
|
|
|
const betsSnapshot = await contractRef.collection('bets').get()
|
|
|
|
const bets = betsSnapshot.docs.map((bet) => bet.data() as Bet)
|
|
|
|
|
|
|
|
console.log('contract', contract.question, 'bets', bets.length)
|
|
|
|
|
|
|
|
for (const bet of bets) await migrateBet(contractRef, bet)
|
|
|
|
await migrateContract(contractRef, contract)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (require.main === module) migrateContracts().then(() => process.exit())
|