From 3b626bccc4adc42ce5107658c247a19a05767af3 Mon Sep 17 00:00:00 2001 From: Pico2x Date: Tue, 6 Sep 2022 15:29:10 +0100 Subject: [PATCH] Adds investmentValue to group leaderboard calculation --- common/calculate-metrics.ts | 18 +++++++++++------- common/scoring.ts | 14 +++++++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/common/calculate-metrics.ts b/common/calculate-metrics.ts index 3aad1a9c..a4028153 100644 --- a/common/calculate-metrics.ts +++ b/common/calculate-metrics.ts @@ -11,16 +11,20 @@ const computeInvestmentValue = ( ) => { return sumBy(bets, (bet) => { const contract = contractsDict[bet.contractId] - if (!contract || contract.isResolved) return 0 - if (bet.sale || bet.isSold) return 0 - - const payout = calculatePayout(contract, bet, 'MKT') - const value = payout - (bet.loanAmount ?? 0) - if (isNaN(value)) return 0 - return value + return computeInvestmentValueForBet(bet, contract) }) } +export const computeInvestmentValueForBet = (bet: Bet, contract: Contract) => { + if (!contract || contract.isResolved) return 0 + if (bet.sale || bet.isSold) return 0 + + const payout = calculatePayout(contract, bet, 'MKT') + const value = payout - (bet.loanAmount ?? 0) + if (isNaN(value)) return 0 + return value +} + const computeTotalPool = (userContracts: Contract[], startTime = 0) => { const periodFilteredContracts = userContracts.filter( (contract) => contract.createdTime >= startTime diff --git a/common/scoring.ts b/common/scoring.ts index 39a342fd..397a204b 100644 --- a/common/scoring.ts +++ b/common/scoring.ts @@ -1,6 +1,7 @@ import { groupBy, sumBy, mapValues, partition } from 'lodash' import { Bet } from './bet' +import { computeInvestmentValueForBet } from './calculate-metrics' import { Contract } from './contract' import { getPayouts } from './payouts' @@ -62,7 +63,18 @@ export function scoreUsersByContract(contract: Contract, bets: Bet[]) { return { userId, payout } }) - const netPayouts = [...resolvePayouts, ...salePayouts, ...investments] + const investmentValues = openBets.map((bet) => { + const { userId } = bet + const investmentValue = computeInvestmentValueForBet(bet, contract) + return { userId, payout: investmentValue } + }) + + const netPayouts = [ + ...resolvePayouts, + ...salePayouts, + ...investments, + ...investmentValues, + ] const userScore = mapValues( groupBy(netPayouts, (payout) => payout.userId),