19 lines
1.1 KiB
TypeScript
19 lines
1.1 KiB
TypeScript
import {serveApiDocumentation} from '@/lib/api-documentation';
|
|
import type {NextApiRequest,NextApiResponse} from 'next';
|
|
import {getEntry} from '@/lib/explore';
|
|
import {tags} from '@/lib/library';
|
|
import {noteEditInput,saveNote,NoteEditConflict} from '@/lib/note-edits';
|
|
import {sameOrigin,apiError} from '@/lib/api';
|
|
export default async function handler(req:NextApiRequest,res:NextApiResponse){
|
|
if(serveApiDocumentation(req,res,'/api/notes/{id}'))return;
|
|
res.setHeader('Cache-Control','no-store');
|
|
if(!['GET','PUT'].includes(req.method||'')){res.setHeader('Allow','GET, PUT');return res.status(405).end();}
|
|
try{
|
|
const id=String(req.query.id||'');const entry=await getEntry(id);if(!entry)return res.status(404).json({error:'笔记不存在'});
|
|
if(req.method==='GET')return res.json({entry,tags:await tags()});
|
|
sameOrigin(req);const input=noteEditInput.parse(req.body);await saveNote(id,input,client=>getEntry(id,client));
|
|
return res.json({entry:await getEntry(id)});
|
|
}catch(e){if(e instanceof NoteEditConflict)return res.status(409).json({error:e.message});return apiError(res,e);}
|
|
}
|
|
export const config={api:{bodyParser:{sizeLimit:'1mb'}}};
|