Files
probably-rendering-one-more…/apps/wiki/src/pages/api/notes/[id].ts
T
codex-bot f81aed8ce8
studio CI and deployment / verify-and-deploy (push) Successful in 3m17s
wiki CI and deployment / verify-and-deploy (push) Successful in 16m44s
Expose plain-text API documentation with agent_mode
2026-10-26 14:59:54 +08:00

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'}}};