market data cloud function

This commit is contained in:
mantikoros 2022-01-11 13:30:18 -06:00
parent 0fef0eeccb
commit f10f7bbaea
2 changed files with 60 additions and 0 deletions

View File

@ -3,6 +3,7 @@ import * as admin from 'firebase-admin'
admin.initializeApp() admin.initializeApp()
// export * from './keep-awake' // export * from './keep-awake'
export * from './markets'
export * from './place-bet' export * from './place-bet'
export * from './resolve-market' export * from './resolve-market'
export * from './stripe' export * from './stripe'

59
functions/src/markets.ts Normal file
View File

@ -0,0 +1,59 @@
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import * as _ from 'lodash'
import { getValues } from './utils'
import { Contract } from '../../common/contract'
import { getProbability } from '../../common/calculate'
const cache = { lastUpdated: 0, data: '' }
export const markets = functions
.runWith({ minInstances: 1 })
.https.onRequest(async (req, res) => {
const contracts: Contract[] = await getValues(
firestore.collection('contracts').orderBy('volume24Hours', 'desc')
)
if (!cache.data || Date.now() - cache.lastUpdated > 120 * 1000) {
const contractsInfo = contracts.map(getContractInfo)
cache.data = JSON.stringify(contractsInfo)
cache.lastUpdated = Date.now()
}
res.status(200).send(cache.data)
})
const getContractInfo = ({
creatorUsername,
creatorName,
createdTime,
closeTime,
question,
description,
slug,
pool,
startPool,
volume7Days,
volume24Hours,
isResolved,
resolution,
}: Contract) => {
return {
creatorUsername,
creatorName,
createdTime,
closeTime,
question,
description,
url: `https://manifold.markets/${creatorUsername}/${slug}`,
pool: pool.YES + pool.NO - startPool.YES - startPool.NO,
probability: getProbability(pool),
volume7Days,
volume24Hours,
isResolved,
resolution,
}
}
const firestore = admin.firestore()