import type { NextApiRequest, NextApiResponse } from 'next' import { listAllGroups, listAvailableGroups } from 'web/lib/firebase/groups' import { applyCorsHeaders, CORS_UNRESTRICTED } from 'web/lib/api/cors' import { z } from 'zod' import { validate } from 'web/pages/api/v0/_validate' import { ValidationError } from 'web/pages/api/v0/_types' const queryParams = z .object({ availableToUserId: 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 { availableToUserId } = params // TODO: should we check if the user is a real user? if (availableToUserId) { const groups = await listAvailableGroups(availableToUserId) res.setHeader('Cache-Control', 'max-age=0') res.status(200).json(groups) return } const groups = await listAllGroups() res.setHeader('Cache-Control', 'max-age=0') res.status(200).json(groups) }