Store bonus txn data in data field

This commit is contained in:
Ian Philips 2022-09-15 07:45:11 -06:00
parent e5428ce525
commit 4a5c6a42f6
3 changed files with 63 additions and 4 deletions

View File

@ -1,6 +1,12 @@
// A txn (pronounced "texan") respresents a payment between two ids on Manifold
// Shortened from "transaction" to distinguish from Firebase transactions (and save chars)
type AnyTxnType = Donation | Tip | Manalink | Referral | Bonus
type AnyTxnType =
| Donation
| Tip
| Manalink
| Referral
| UniqueBettorBonus
| BettingStreakBonus
type SourceType = 'USER' | 'CONTRACT' | 'CHARITY' | 'BANK'
export type Txn<T extends AnyTxnType = AnyTxnType> = {
@ -60,10 +66,27 @@ type Referral = {
category: 'REFERRAL'
}
type Bonus = {
type UniqueBettorBonus = {
fromType: 'BANK'
toType: 'USER'
category: 'UNIQUE_BETTOR_BONUS' | 'BETTING_STREAK_BONUS'
category: 'UNIQUE_BETTOR_BONUS'
// This data was mistakenly stored as a stringified JSON object in description previously
data: {
contractId: string
uniqueNewBettorId?: string
// Previously stored all unique bettor ids in description
uniqueBettorIds?: string[]
}
}
type BettingStreakBonus = {
fromType: 'BANK'
toType: 'USER'
category: 'BETTING_STREAK_BONUS'
// This data was mistakenly stored as a stringified JSON object in description previously
data: {
currentBettingStreak?: number
}
}
export type DonationTxn = Txn & Donation

View File

@ -119,6 +119,7 @@ const updateBettingStreak = async (
token: 'M$',
category: 'BETTING_STREAK_BONUS',
description: JSON.stringify(bonusTxnDetails),
data: bonusTxnDetails,
}
return await runTxn(trans, bonusTxn)
})
@ -186,7 +187,7 @@ const updateUniqueBettorsAndGiveCreatorBonus = async (
// Create combined txn for all new unique bettors
const bonusTxnDetails = {
contractId: contract.id,
uniqueBettorIds: newUniqueBettorIds,
uniqueNewBettorId: bettor.id,
}
const fromUserId = isProd()
? HOUSE_LIQUIDITY_PROVIDER_ID
@ -204,6 +205,7 @@ const updateUniqueBettorsAndGiveCreatorBonus = async (
token: 'M$',
category: 'UNIQUE_BETTOR_BONUS',
description: JSON.stringify(bonusTxnDetails),
data: bonusTxnDetails,
}
return await runTxn(trans, bonusTxn)
})

View File

@ -0,0 +1,34 @@
import * as admin from 'firebase-admin'
import { initAdmin } from './script-init'
import { Txn } from 'common/txn'
import { getValues } from 'functions/src/utils'
initAdmin()
const firestore = admin.firestore()
async function main() {
// get all txns
const bonusTxns = await getValues<Txn>(
firestore
.collection('txns')
.where('category', 'in', ['UNIQUE_BETTOR_BONUS', 'BETTING_STREAK_BONUS'])
)
// JSON parse description field and add to data field
const updatedTxns = bonusTxns.map((txn) => {
txn.data = txn.description && JSON.parse(txn.description)
return txn
})
console.log('updatedTxns', updatedTxns[0])
// update txns
await Promise.all(
updatedTxns.map((txn) => {
return firestore.collection('txns').doc(txn.id).update({
data: txn.data,
})
})
)
}
if (require.main === module) main().then(() => process.exit())