Fix more places where insufficient balance error was not accounting for loans

This commit is contained in:
James Grugett 2022-03-02 14:28:23 -08:00
parent cd8b336635
commit fa817c34a9
4 changed files with 6 additions and 17 deletions

View File

@ -9,7 +9,6 @@ import {
getNewMultiBetInfo, getNewMultiBetInfo,
} from '../../common/new-bet' } from '../../common/new-bet'
import { Bet } from '../../common/bet' import { Bet } from '../../common/bet'
import { getValues } from './utils'
export const placeBet = functions.runWith({ minInstances: 1 }).https.onCall( export const placeBet = functions.runWith({ minInstances: 1 }).https.onCall(
async ( async (
@ -39,9 +38,6 @@ export const placeBet = functions.runWith({ minInstances: 1 }).https.onCall(
return { status: 'error', message: 'User not found' } return { status: 'error', message: 'User not found' }
const user = userSnap.data() as User const user = userSnap.data() as User
if (user.balance < amount)
return { status: 'error', message: 'Insufficient balance' }
const contractDoc = firestore.doc(`contracts/${contractId}`) const contractDoc = firestore.doc(`contracts/${contractId}`)
const contractSnap = await transaction.get(contractDoc) const contractSnap = await transaction.get(contractDoc)
if (!contractSnap.exists) if (!contractSnap.exists)
@ -57,6 +53,10 @@ export const placeBet = functions.runWith({ minInstances: 1 }).https.onCall(
) )
const yourBets = yourBetsSnap.docs.map((doc) => doc.data() as Bet) const yourBets = yourBetsSnap.docs.map((doc) => doc.data() as Bet)
const loanAmount = getLoanAmount(yourBets, amount)
if (user.balance < amount - loanAmount)
return { status: 'error', message: 'Insufficient balance' }
if (outcomeType === 'FREE_RESPONSE') { if (outcomeType === 'FREE_RESPONSE') {
const answerSnap = await transaction.get( const answerSnap = await transaction.get(
contractDoc.collection('answers').doc(outcome) contractDoc.collection('answers').doc(outcome)
@ -69,8 +69,6 @@ export const placeBet = functions.runWith({ minInstances: 1 }).https.onCall(
.collection(`contracts/${contractId}/bets`) .collection(`contracts/${contractId}/bets`)
.doc() .doc()
const loanAmount = getLoanAmount(yourBets, amount)
const { newBet, newPool, newTotalShares, newTotalBets, newBalance } = const { newBet, newPool, newTotalShares, newTotalBets, newBalance } =
outcomeType === 'BINARY' outcomeType === 'BINARY'
? getNewBinaryBetInfo( ? getNewBinaryBetInfo(

View File

@ -49,11 +49,6 @@ export function AnswerBetPanel(props: {
async function submitBet() { async function submitBet() {
if (!user || !betAmount) return if (!user || !betAmount) return
if (user.balance < betAmount) {
setError('Insufficient balance')
return
}
setError(undefined) setError(undefined)
setIsSubmitting(true) setIsSubmitting(true)

View File

@ -36,6 +36,7 @@ export function CreateAnswerPanel(props: { contract: Contract }) {
const submitAnswer = async () => { const submitAnswer = async () => {
if (canSubmit) { if (canSubmit) {
setIsSubmitting(true) setIsSubmitting(true)
const result = await createAnswer({ const result = await createAnswer({
contractId: contract.id, contractId: contract.id,
text, text,
@ -48,7 +49,7 @@ export function CreateAnswerPanel(props: { contract: Contract }) {
setText('') setText('')
setBetAmount(10) setBetAmount(10)
setAmountError(undefined) setAmountError(undefined)
} } else setAmountError(result.message)
} }
} }

View File

@ -78,11 +78,6 @@ export function BetPanel(props: {
async function submitBet() { async function submitBet() {
if (!user || !betAmount) return if (!user || !betAmount) return
if (user.balance < betAmount) {
setError('Insufficient balance')
return
}
setError(undefined) setError(undefined)
setIsSubmitting(true) setIsSubmitting(true)