rebreak-monorepo/backend/server/api/coach/sos-session.post.ts

36 lines
1.2 KiB
TypeScript

/**
* POST /api/coach/sos-session — Erstellt Session für SSE-Stream
*
* Client sendet messages + locale, Backend generiert sessionId
* und speichert Daten in-memory. Client nutzt dann GET /api/coach/sos-stream?session=xyz
*
* Grund: react-native-sse (EventSource API) unterstützt nur GET, nicht POST.
* Daher 2-Step-Flow: POST Session erstellen → GET Stream öffnen.
*/
export default defineEventHandler(async (event) => {
const user = await requireUser(event);
const body = await readBody(event);
const { messages, locale } = body as {
messages: Array<{ role: "user" | "assistant"; content: string }>;
locale?: string;
};
if (!messages || !Array.isArray(messages)) {
throw createError({ statusCode: 400, message: "messages fehlt" });
}
// Session-ID generieren
const sessionId = `sos_${user.id}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
// In globalem Store speichern (siehe server/utils/sosSessions.ts)
const { setSosSession } = await import("../../utils/sosSessions");
setSosSession(sessionId, {
userId: user.id,
messages,
locale: locale ?? "de",
createdAt: Date.now(),
});
return { sessionId };
});