37 lines
937 B
TypeScript
37 lines
937 B
TypeScript
import { db } from '~/drizzle/db'
|
|
import { songComments } from '~/drizzle/schema'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = event.context.user
|
|
if (!user) {
|
|
throw createError({ statusCode: 401, message: '未授权访问' })
|
|
}
|
|
|
|
const songId = Number(getRouterParam(event, 'id'))
|
|
if (!Number.isFinite(songId) || songId <= 0) {
|
|
throw createError({ statusCode: 400, message: '无效的 songId' })
|
|
}
|
|
|
|
const body = await readBody(event)
|
|
const content = typeof body?.content === 'string' ? body.content.trim() : ''
|
|
|
|
if (!content) {
|
|
throw createError({ statusCode: 400, message: '评论内容不能为空' })
|
|
}
|
|
if (content.length > 300) {
|
|
throw createError({ statusCode: 400, message: '评论内容最多 300 字' })
|
|
}
|
|
|
|
const rows = await db
|
|
.insert(songComments)
|
|
.values({
|
|
songId,
|
|
userId: user.id,
|
|
content
|
|
})
|
|
.returning()
|
|
|
|
return rows[0]
|
|
})
|
|
|