You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.7 KiB
57 lines
1.7 KiB
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 });
|
|
});
|
|
|