From 4fc0bcd8a950dd8613ea781bb86e317a15c3db40 Mon Sep 17 00:00:00 2001 From: mantikoros Date: Tue, 18 Jan 2022 21:30:11 -0600 Subject: [PATCH] track total deposits --- common/user.ts | 1 + functions/src/create-user.ts | 1 + functions/src/scripts/create-private-users.ts | 11 ++++++++++- functions/src/stripe.ts | 2 +- functions/src/utils.ts | 15 ++++++++++++--- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/common/user.ts b/common/user.ts index d3ab391e..ccaf2414 100644 --- a/common/user.ts +++ b/common/user.ts @@ -7,6 +7,7 @@ export type User = { avatarUrl?: string balance: number + totalDeposits: number totalPnLCached: number creatorVolumeCached: number } diff --git a/functions/src/create-user.ts b/functions/src/create-user.ts index 71ed565f..cd6f92b2 100644 --- a/functions/src/create-user.ts +++ b/functions/src/create-user.ts @@ -55,6 +55,7 @@ export const createUser = functions username, avatarUrl, balance, + totalDeposits: balance, createdTime: Date.now(), totalPnLCached: 0, creatorVolumeCached: 0, diff --git a/functions/src/scripts/create-private-users.ts b/functions/src/scripts/create-private-users.ts index 9ef0ec33..f9d84ba3 100644 --- a/functions/src/scripts/create-private-users.ts +++ b/functions/src/scripts/create-private-users.ts @@ -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') diff --git a/functions/src/stripe.ts b/functions/src/stripe.ts index 2f054392..4dffe541 100644 --- a/functions/src/stripe.ts +++ b/functions/src/stripe.ts @@ -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) } diff --git a/functions/src/utils.ts b/functions/src/utils.ts index 1a52d116..9f3777e8 100644 --- a/functions/src/utils.ts +++ b/functions/src/utils.ts @@ -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) => {