index.ts38 lines · main
1import { NextApiRequest, NextApiResponse } from 'next'
2
3import { constructHeaders } from '@/lib/api/apiHelpers'
4import apiWrapper from '@/lib/api/apiWrapper'
5import { executeQuery } from '@/lib/api/self-hosted/query'
6import { PgMetaDatabaseError } from '@/lib/api/self-hosted/types'
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 'POST':
16 return handlePost(req, res)
17 default:
18 res.setHeader('Allow', ['POST'])
19 res.status(405).json({ error: { message: `Method ${method} Not Allowed` } })
20 }
21}
22
23const handlePost = async (req: NextApiRequest, res: NextApiResponse) => {
24 const { query } = req.body
25 const headers = constructHeaders(req.headers)
26 const { data, error } = await executeQuery({ query, headers })
27
28 if (error) {
29 if (error instanceof PgMetaDatabaseError) {
30 const { statusCode, message, formattedError } = error
31 return res.status(statusCode).json({ message, formattedError })
32 }
33 const { message } = error
34 return res.status(500).json({ message, formattedError: message })
35 } else {
36 return res.status(200).json(data)
37 }
38}