import { NextApiRequest, NextApiResponse } from 'next' import { applyCorsHeaders, CORS_UNRESTRICTED } from 'web/lib/api/cors' import { Bet, getBets } from 'web/lib/firebase/bets' import { getContractFromSlug } from 'web/lib/firebase/contracts' import { getUserByUsername } from 'web/lib/firebase/users' import { ApiError, ValidationError } from './_types' import { z } from 'zod' import { validate } from './_validate' const queryParams = z .object({ username: z.string().optional(), market: z.string().optional(), limit: z .number() .default(1000) .or(z.string().regex(/\d+/).transform(Number)) .refine((n) => n >= 0 && n <= 1000, 'Limit must be between 0 and 1000'), before: z.string().optional(), }) .strict() export default async function handler( req: NextApiRequest, res: NextApiResponse ) { await applyCorsHeaders(req, res, CORS_UNRESTRICTED) let params: z.infer try { params = validate(queryParams, req.query) } catch (e) { if (e instanceof ValidationError) { return res.status(400).json(e) } console.error(`Unknown error during validation: ${e}`) return res.status(500).json({ error: 'Unknown error during validation' }) } const { username, market, limit, before } = params let userId: string | undefined if (username) { const user = await getUserByUsername(username) if (!user) { res.status(404).json({ error: 'User not found' }) return } userId = user.id } let contractId: string | undefined if (market) { const contract = await getContractFromSlug(market) if (!contract) { res.status(404).json({ error: 'Contract not found' }) return } contractId = contract.id } const bets = await getBets({ userId, contractId, limit, before }) res.setHeader('Cache-Control', 'max-age=0') return res.status(200).json(bets) }