market data cloud function
This commit is contained in:
parent
0fef0eeccb
commit
f10f7bbaea
|
@ -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
59
functions/src/markets.ts
Normal 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()
|
Loading…
Reference in New Issue
Block a user