tables.ts58 lines · main
1import { NextApiRequest, NextApiResponse } from 'next'
2
3import { fetchGet } from '@/data/fetchers'
4import { constructHeaders } from '@/lib/api/apiHelpers'
5import apiWrapper from '@/lib/api/apiWrapper'
6import { PG_META_URL } from '@/lib/constants'
7
8export default (req: NextApiRequest, res: NextApiResponse) =>
9 apiWrapper(req, res, handler, { withAuth: true })
10
11async function handler(req: NextApiRequest, res: NextApiResponse) {
12 const { method } = req
13
14 switch (method) {
15 case 'GET':
16 return handleGetAll(req, res)
17 default:
18 res.setHeader('Allow', ['GET'])
19 res.status(405).json({ error: { message: `Method ${method} Not Allowed` } })
20 }
21}
22
23/**
24 * Construct the pgMeta redirection url passing along the filtering query params
25 * @param req
26 * @param endpoint
27 */
28export function getPgMetaRedirectUrl(req: NextApiRequest, endpoint: string) {
29 const query = Object.entries(req.query).reduce((query, entry) => {
30 const [key, value] = entry
31 if (Array.isArray(value)) {
32 for (const v of value) {
33 query.append(key, v)
34 }
35 } else if (value) {
36 query.set(key, value)
37 }
38 return query
39 }, new URLSearchParams())
40
41 let url = `${PG_META_URL}/${endpoint}`
42 if (Object.keys(req.query).length > 0) {
43 url += `?${query}`
44 }
45 return url
46}
47
48const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => {
49 const headers = constructHeaders(req.headers)
50 const response = await fetchGet(getPgMetaRedirectUrl(req, 'tables'), { headers })
51
52 if (response.error) {
53 const { code, message } = response.error
54 return res.status(code).json({ message })
55 } else {
56 return res.status(200).json(response)
57 }
58}