Take back unique bettor bonuses on N/A
This commit is contained in:
parent
718218c717
commit
4c10c8499b
|
@ -9,7 +9,7 @@ import {
|
||||||
RESOLUTIONS,
|
RESOLUTIONS,
|
||||||
} from '../../common/contract'
|
} from '../../common/contract'
|
||||||
import { Bet } from '../../common/bet'
|
import { Bet } from '../../common/bet'
|
||||||
import { getUser, isProd, payUser } from './utils'
|
import { getUser, getValues, isProd, log, payUser } from './utils'
|
||||||
import {
|
import {
|
||||||
getLoanPayouts,
|
getLoanPayouts,
|
||||||
getPayouts,
|
getPayouts,
|
||||||
|
@ -22,6 +22,12 @@ import { LiquidityProvision } from '../../common/liquidity-provision'
|
||||||
import { APIError, newEndpoint, validate } from './api'
|
import { APIError, newEndpoint, validate } from './api'
|
||||||
import { getContractBetMetrics } from '../../common/calculate'
|
import { getContractBetMetrics } from '../../common/calculate'
|
||||||
import { createCommentOrAnswerOrUpdatedContractNotification } from './create-notification'
|
import { createCommentOrAnswerOrUpdatedContractNotification } from './create-notification'
|
||||||
|
import { CancelUniqueBettorBonusTxn, Txn } from '../../common/txn'
|
||||||
|
import { runTxn, TxnData } from './transact'
|
||||||
|
import {
|
||||||
|
DEV_HOUSE_LIQUIDITY_PROVIDER_ID,
|
||||||
|
HOUSE_LIQUIDITY_PROVIDER_ID,
|
||||||
|
} from '../../common/antes'
|
||||||
|
|
||||||
const bodySchema = z.object({
|
const bodySchema = z.object({
|
||||||
contractId: z.string(),
|
contractId: z.string(),
|
||||||
|
@ -163,6 +169,7 @@ export const resolvemarket = newEndpoint(opts, async (req, auth) => {
|
||||||
await processPayouts(liquidityPayouts, true)
|
await processPayouts(liquidityPayouts, true)
|
||||||
|
|
||||||
await processPayouts([...payouts, ...loanPayouts])
|
await processPayouts([...payouts, ...loanPayouts])
|
||||||
|
await undoUniqueBettorRewardsIfCancelResolution(contract, outcome)
|
||||||
|
|
||||||
const userPayoutsWithoutLoans = groupPayoutsByUser(payouts)
|
const userPayoutsWithoutLoans = groupPayoutsByUser(payouts)
|
||||||
|
|
||||||
|
@ -299,4 +306,55 @@ function validateAnswer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function undoUniqueBettorRewardsIfCancelResolution(
|
||||||
|
contract: Contract,
|
||||||
|
outcome: string
|
||||||
|
) {
|
||||||
|
if (outcome === 'CANCEL') {
|
||||||
|
const creatorsBonusTxns = await getValues<Txn>(
|
||||||
|
firestore
|
||||||
|
.collection('txns')
|
||||||
|
.where('category', '==', 'UNIQUE_BETTOR_BONUS')
|
||||||
|
.where('toId', '==', contract.creatorId)
|
||||||
|
)
|
||||||
|
|
||||||
|
const bonusTxnsOnThisContract = creatorsBonusTxns.filter(
|
||||||
|
(txn) => txn.data && txn.data.contractId === contract.id
|
||||||
|
)
|
||||||
|
log('total bonusTxnsOnThisContract', bonusTxnsOnThisContract.length)
|
||||||
|
const totalBonusAmount = sumBy(bonusTxnsOnThisContract, (txn) => txn.amount)
|
||||||
|
log('totalBonusAmount to be withdrawn', totalBonusAmount)
|
||||||
|
const result = await firestore.runTransaction(async (trans) => {
|
||||||
|
const bonusTxn: TxnData = {
|
||||||
|
fromId: contract.creatorId,
|
||||||
|
fromType: 'USER',
|
||||||
|
toId: isProd()
|
||||||
|
? HOUSE_LIQUIDITY_PROVIDER_ID
|
||||||
|
: DEV_HOUSE_LIQUIDITY_PROVIDER_ID,
|
||||||
|
toType: 'BANK',
|
||||||
|
amount: totalBonusAmount,
|
||||||
|
token: 'M$',
|
||||||
|
category: 'CANCEL_UNIQUE_BETTOR_BONUS',
|
||||||
|
data: {
|
||||||
|
contractId: contract.id,
|
||||||
|
},
|
||||||
|
} as Omit<CancelUniqueBettorBonusTxn, 'id' | 'createdTime'>
|
||||||
|
return await runTxn(trans, bonusTxn)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (result.status != 'success' || !result.txn) {
|
||||||
|
log(
|
||||||
|
`Couldn't cancel bonus for user: ${contract.creatorId} - status:`,
|
||||||
|
result.status
|
||||||
|
)
|
||||||
|
log('message:', result.message)
|
||||||
|
} else {
|
||||||
|
log(
|
||||||
|
`Cancel Bonus txn for user: ${contract.creatorId} completed:`,
|
||||||
|
result.txn?.id
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const firestore = admin.firestore()
|
const firestore = admin.firestore()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user