track total deposits

This commit is contained in:
mantikoros 2022-01-18 21:30:11 -06:00
parent dd2f271de8
commit 4fc0bcd8a9
5 changed files with 25 additions and 5 deletions

View File

@ -7,6 +7,7 @@ export type User = {
avatarUrl?: string
balance: number
totalDeposits: number
totalPnLCached: number
creatorVolumeCached: number
}

View File

@ -55,6 +55,7 @@ export const createUser = functions
username,
avatarUrl,
balance,
totalDeposits: balance,
createdTime: Date.now(),
totalPnLCached: 0,
creatorVolumeCached: 0,

View File

@ -1,7 +1,7 @@
import * as admin from 'firebase-admin'
import * as _ from 'lodash'
import { PrivateUser, User } from '../../../common/user'
import { PrivateUser, STARTING_BALANCE, User } from '../../../common/user'
// Generate your own private key, and set the path below:
// https://console.firebase.google.com/u/0/project/mantic-markets/settings/serviceaccounts/adminsdk
@ -29,6 +29,15 @@ async function main() {
username,
}
if (user.totalDeposits === undefined) {
await firestore
.collection('users')
.doc(user.id)
.update({ totalDeposits: STARTING_BALANCE })
console.log('set starting balance for:', user.username)
}
try {
await firestore
.collection('private-users')

View File

@ -129,7 +129,7 @@ const issueMoneys = async (session: any) => {
await firestore.collection('stripe-transactions').add(transaction)
await payUser(userId, payout)
await payUser(userId, payout, true)
console.log('user', userId, 'paid M$', payout)
}

View File

@ -37,7 +37,11 @@ export const getUserByUsername = async (username: string) => {
const firestore = admin.firestore()
const updateUserBalance = (userId: string, delta: number) => {
const updateUserBalance = (
userId: string,
delta: number,
isDeposit = false
) => {
return firestore.runTransaction(async (transaction) => {
const userDoc = firestore.doc(`users/${userId}`)
const userSnap = await transaction.get(userDoc)
@ -51,15 +55,20 @@ const updateUserBalance = (userId: string, delta: number) => {
`User (${userId}) balance cannot be negative: ${newUserBalance}`
)
if (isDeposit) {
const newTotalDeposits = (user.totalDeposits || 0) + delta
transaction.update(userDoc, { totalDeposits: newTotalDeposits })
}
transaction.update(userDoc, { balance: newUserBalance })
})
}
export const payUser = (userId: string, payout: number) => {
export const payUser = (userId: string, payout: number, isDeposit = false) => {
if (!isFinite(payout) || payout <= 0)
throw new Error('Payout is not positive: ' + payout)
return updateUserBalance(userId, payout)
return updateUserBalance(userId, payout, isDeposit)
}
export const chargeUser = (userId: string, charge: number) => {