manifold/functions/src/markets.ts

60 lines
1.4 KiB
TypeScript
Raw Normal View History

2022-01-11 19:30:18 +00:00
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()