Sell bet loan: negate buy bet's loan
This commit is contained in:
parent
2ba3ff8982
commit
1129b09898
|
@ -1,9 +1,21 @@
|
||||||
import { Dictionary, groupBy, sumBy, minBy } from 'lodash'
|
import { Dictionary, groupBy, sumBy, minBy } from 'lodash'
|
||||||
import { Bet } from './bet'
|
import { Bet } from './bet'
|
||||||
import { getContractBetMetrics } from './calculate'
|
import { getContractBetMetrics } from './calculate'
|
||||||
import { Contract, CPMMContract, FreeResponseContract, MultipleChoiceContract } from './contract'
|
import {
|
||||||
|
Contract,
|
||||||
|
CPMMContract,
|
||||||
|
FreeResponseContract,
|
||||||
|
MultipleChoiceContract,
|
||||||
|
} from './contract'
|
||||||
import { filterDefined } from './util/array'
|
import { filterDefined } from './util/array'
|
||||||
|
|
||||||
|
const LOAN_WEEKLY_RATE = 0.05
|
||||||
|
|
||||||
|
const calculateNewLoan = (investedValue: number, loanTotal: number) => {
|
||||||
|
const netValue = investedValue - loanTotal
|
||||||
|
return netValue * LOAN_WEEKLY_RATE
|
||||||
|
}
|
||||||
|
|
||||||
export const getUserLoanUpdates = (
|
export const getUserLoanUpdates = (
|
||||||
bets: Bet[],
|
bets: Bet[],
|
||||||
contractsById: Dictionary<Contract>
|
contractsById: Dictionary<Contract>
|
||||||
|
@ -80,10 +92,3 @@ const getFreeResponseContractLoanUpdate = (
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const LOAN_WEEKLY_RATE = 0.05
|
|
||||||
|
|
||||||
const calculateNewLoan = (investedValue: number, loanTotal: number) => {
|
|
||||||
const netValue = investedValue - loanTotal
|
|
||||||
return netValue * LOAN_WEEKLY_RATE
|
|
||||||
}
|
|
|
@ -13,7 +13,7 @@ export type CandidateBet<T extends Bet> = Omit<T, 'id' | 'userId'>
|
||||||
|
|
||||||
export const getSellBetInfo = (bet: Bet, contract: DPMContract) => {
|
export const getSellBetInfo = (bet: Bet, contract: DPMContract) => {
|
||||||
const { pool, totalShares, totalBets } = contract
|
const { pool, totalShares, totalBets } = contract
|
||||||
const { id: betId, amount, shares, outcome } = bet
|
const { id: betId, amount, shares, outcome, loanAmount } = bet
|
||||||
|
|
||||||
const adjShareValue = calculateDpmShareValue(contract, bet)
|
const adjShareValue = calculateDpmShareValue(contract, bet)
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ export const getSellBetInfo = (bet: Bet, contract: DPMContract) => {
|
||||||
betId,
|
betId,
|
||||||
},
|
},
|
||||||
fees,
|
fees,
|
||||||
|
loanAmount: -(loanAmount ?? 0),
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -50,11 +50,12 @@ export const sellbet = newEndpoint({}, async (req, auth) => {
|
||||||
|
|
||||||
/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
|
/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
|
||||||
const saleAmount = newBet.sale!.amount
|
const saleAmount = newBet.sale!.amount
|
||||||
const newBalance = user.balance + saleAmount - (bet.loanAmount ?? 0)
|
const newBalance = user.balance + saleAmount + (newBet.loanAmount ?? 0)
|
||||||
const newBetDoc = firestore.collection(`contracts/${contractId}/bets`).doc()
|
const newBetDoc = firestore.collection(`contracts/${contractId}/bets`).doc()
|
||||||
|
|
||||||
transaction.update(userDoc, { balance: newBalance })
|
transaction.update(userDoc, { balance: newBalance })
|
||||||
transaction.update(betDoc, { isSold: true })
|
transaction.update(betDoc, { isSold: true })
|
||||||
|
// Note: id should have been newBetDoc.id! But leaving it for now so it's consistent.
|
||||||
transaction.create(newBetDoc, { id: betDoc.id, userId: user.id, ...newBet })
|
transaction.create(newBetDoc, { id: betDoc.id, userId: user.id, ...newBet })
|
||||||
transaction.update(
|
transaction.update(
|
||||||
contractDoc,
|
contractDoc,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user