Files
2026-11-05 01:04:53 +08:00

8 lines
897 B
TypeScript

import type {NextApiRequest,NextApiResponse} from 'next';
import {randomUUID} from 'node:crypto';
import {authorize,fail} from '../../../../lib/store';
import {listSchemas,putSchema} from '../../../../lib/schemas';
import {InputError} from '../../../../lib/schema';
export const config={api:{bodyParser:{sizeLimit:'300kb'}}};
export default async function handler(req:NextApiRequest,res:NextApiResponse){res.setHeader('Cache-Control','no-store');if(!authorize(req,res))return;try{if(req.method==='GET')return res.json({schemas:await listSchemas()});if(req.method==='POST')return res.status(201).json(await putSchema(randomUUID(),req.body));res.setHeader('Allow','GET, POST');return res.status(405).json({error:{code:'METHOD_NOT_ALLOWED',message:'Use GET or POST'}});}catch(e){if(e instanceof InputError)return res.status(400).json({error:{code:'INVALID_SCHEMA',message:e.message}});fail(res,e);}}