import { defineWrappedResponseHandler } from "#server/utils/handler"; import { R } from "#server/utils/response"; import { getCurrentUser } from "#server/utils/context"; import { dbGlobal } from "drizzle-pkg/lib/db"; import { agentMessageFeedback } from "drizzle-pkg/lib/schema/agent"; import { agentMessages } from "drizzle-pkg/lib/schema/agent"; import { eq, and } from "drizzle-orm"; export default defineWrappedResponseHandler(async (event) => { const user = await getCurrentUser(event); if (!user) { return R.error("仅登录用户可提交反馈", null); } const body = await readBody(event); const { messageId, feedback, comment } = body as { messageId: string; feedback: "like" | "dislike"; comment?: string; }; if (!messageId || !feedback || !["like", "dislike"].includes(feedback)) { return R.error("参数无效", null); } const [message] = await dbGlobal .select({ id: agentMessages.id }) .from(agentMessages) .where(eq(agentMessages.id, messageId)) .limit(1); if (!message) { return R.error("消息不存在", null); } const [existing] = await dbGlobal .select() .from(agentMessageFeedback) .where(and(eq(agentMessageFeedback.messageId, messageId), eq(agentMessageFeedback.userId, user.id))) .limit(1); if (existing) { await dbGlobal .update(agentMessageFeedback) .set({ feedback, comment: comment ?? null, updatedAt: new Date() }) .where(eq(agentMessageFeedback.id, existing.id)); } else { await dbGlobal.insert(agentMessageFeedback).values({ messageId, userId: user.id, feedback, comment: comment ?? null, }); } return R.success({ messageId, feedback }); });