42 lines
1,016 B
JavaScript
42 lines
1,016 B
JavaScript
import * as z from 'zod'
|
|
import WikiArticle from '../../../models/wikiArticle.js'
|
|
import { connectDB } from '../../../utils/mongoose.js'
|
|
|
|
const wikiUpdateSchema = z.object({
|
|
tags: z.array(z.string()).optional(),
|
|
hidden: z.boolean().optional()
|
|
})
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
await requireAdmin(event)
|
|
|
|
const body = await validateBody(event, wikiUpdateSchema)
|
|
const id = getRouterParam(event, 'id')
|
|
|
|
if (body.tags === undefined && body.hidden === undefined) {
|
|
throw createError({ statusCode: 400, statusMessage: 'Nothing to update' })
|
|
}
|
|
|
|
await connectDB()
|
|
|
|
const update = {}
|
|
if (body.tags !== undefined) {
|
|
await validateTagSlugs(body.tags)
|
|
update.tags = body.tags
|
|
}
|
|
if (body.hidden !== undefined) {
|
|
update.hidden = body.hidden
|
|
}
|
|
|
|
const article = await WikiArticle.findByIdAndUpdate(
|
|
id,
|
|
update,
|
|
{ new: true }
|
|
)
|
|
|
|
if (!article) {
|
|
throw createError({ statusCode: 404, statusMessage: 'Article not found' })
|
|
}
|
|
|
|
return article
|
|
})
|