Team/user CRMFS export + scoped chat
This commit is contained in:
22
Frontend/server/api/chat.get.ts
Normal file
22
Frontend/server/api/chat.get.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { prisma } from "../utils/prisma";
|
||||
import { getAuthContext } from "../utils/auth";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const auth = await getAuthContext(event);
|
||||
const items = await prisma.chatMessage.findMany({
|
||||
where: { teamId: auth.teamId, conversationId: auth.conversationId },
|
||||
orderBy: { createdAt: "asc" },
|
||||
take: 200,
|
||||
});
|
||||
|
||||
return {
|
||||
items: items.map((m) => ({
|
||||
id: m.id,
|
||||
role: m.role === "USER" ? "user" : m.role === "ASSISTANT" ? "assistant" : "system",
|
||||
text: m.text,
|
||||
plan: (m.planJson as any)?.steps ?? null,
|
||||
tools: (m.planJson as any)?.tools ?? null,
|
||||
createdAt: m.createdAt,
|
||||
})),
|
||||
};
|
||||
});
|
||||
33
Frontend/server/api/chat.post.ts
Normal file
33
Frontend/server/api/chat.post.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { readBody } from "h3";
|
||||
import { persistChatMessage, runCrmAgentFor } from "../agent/crmAgent";
|
||||
import { getAuthContext } from "../utils/auth";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody<{ text?: string }>(event);
|
||||
const text = (body?.text ?? "").trim();
|
||||
if (!text) {
|
||||
throw createError({ statusCode: 400, statusMessage: "text is required" });
|
||||
}
|
||||
|
||||
const auth = await getAuthContext(event);
|
||||
await persistChatMessage({
|
||||
teamId: auth.teamId,
|
||||
conversationId: auth.conversationId,
|
||||
authorUserId: auth.userId,
|
||||
role: "USER",
|
||||
text,
|
||||
});
|
||||
|
||||
const reply = await runCrmAgentFor({ teamId: auth.teamId, userId: auth.userId, userText: text });
|
||||
await persistChatMessage({
|
||||
teamId: auth.teamId,
|
||||
conversationId: auth.conversationId,
|
||||
authorUserId: null,
|
||||
role: "ASSISTANT",
|
||||
text: reply.text,
|
||||
plan: reply.plan,
|
||||
tools: reply.tools,
|
||||
});
|
||||
|
||||
return { ok: true };
|
||||
});
|
||||
25
Frontend/server/api/chat/log.post.ts
Normal file
25
Frontend/server/api/chat/log.post.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { readBody } from "h3";
|
||||
import { persistChatMessage } from "../../agent/crmAgent";
|
||||
import { getAuthContext } from "../../utils/auth";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody<{ text?: string }>(event);
|
||||
const text = (body?.text ?? "").trim();
|
||||
if (!text) {
|
||||
throw createError({ statusCode: 400, statusMessage: "text is required" });
|
||||
}
|
||||
|
||||
const auth = await getAuthContext(event);
|
||||
await persistChatMessage({
|
||||
teamId: auth.teamId,
|
||||
conversationId: auth.conversationId,
|
||||
authorUserId: null,
|
||||
role: "ASSISTANT",
|
||||
text,
|
||||
plan: [],
|
||||
tools: [],
|
||||
});
|
||||
|
||||
return { ok: true };
|
||||
});
|
||||
|
||||
8
Frontend/server/api/dataset/export.post.ts
Normal file
8
Frontend/server/api/dataset/export.post.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { exportDatasetFromPrismaFor } from "../../dataset/exporter";
|
||||
import { getAuthContext } from "../../utils/auth";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const auth = await getAuthContext(event);
|
||||
await exportDatasetFromPrismaFor({ teamId: auth.teamId, userId: auth.userId });
|
||||
return { ok: true };
|
||||
});
|
||||
Reference in New Issue
Block a user