import BoardPost from '../../../models/boardPost.js' import { requireAuth } from '../../../utils/auth.js' import { validateBody } from '../../../utils/validateBody.js' import { boardPostUpdateSchema } from '../../../utils/schemas.js' export default defineEventHandler(async (event) => { const member = await requireAuth(event) const id = getRouterParam(event, 'id') const body = await validateBody(event, boardPostUpdateSchema) const post = await BoardPost.findById(id) if (!post) { throw createError({ statusCode: 404, statusMessage: 'Post not found' }) } if (post.author.toString() !== member._id.toString()) { throw createError({ statusCode: 403, statusMessage: 'Not authorized to edit this post' }) } if (body.title !== undefined) post.title = body.title if (body.seeking !== undefined) post.seeking = body.seeking if (body.offering !== undefined) post.offering = body.offering if (body.note !== undefined) post.note = body.note if (body.tags !== undefined) post.tags = body.tags const seeking = (post.seeking || '').trim() const offering = (post.offering || '').trim() if (!seeking && !offering) { throw createError({ statusCode: 400, statusMessage: 'At least one of seeking or offering must be provided' }) } try { await post.save() } catch (err) { if (err.name === 'ValidationError') { throw createError({ statusCode: 400, statusMessage: 'Validation failed', data: err.errors }) } throw err } await post.populate('author', 'name avatar circle board.slackHandle') return { post: post.toObject() } })