mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-01-16 18:52:08 +01:00
- Implement repository pattern for data access layer - Add comprehensive service layer for business logic - Create scheduler management system with health monitoring - Add bounded buffer utility for memory management - Enhance security audit logging with retention policies
117 lines
4.0 KiB
TypeScript
117 lines
4.0 KiB
TypeScript
import { type NextRequest, NextResponse } from "next/server";
|
|
import { prisma } from "../../../../../lib/prisma";
|
|
import type { ChatSession } from "../../../../../lib/types";
|
|
|
|
/**
|
|
* Maps Prisma session object to ChatSession type
|
|
*/
|
|
function mapPrismaSessionToChatSession(prismaSession: {
|
|
id: string;
|
|
startTime: Date;
|
|
endTime: Date | null;
|
|
createdAt: Date;
|
|
category: string | null;
|
|
language: string | null;
|
|
country: string | null;
|
|
ipAddress: string | null;
|
|
sentiment: string | null;
|
|
messagesSent: number | null;
|
|
avgResponseTime: number | null;
|
|
escalated: boolean | null;
|
|
forwardedHr: boolean | null;
|
|
initialMsg: string | null;
|
|
fullTranscriptUrl: string | null;
|
|
summary: string | null;
|
|
messages: Array<{
|
|
id: string;
|
|
sessionId: string;
|
|
timestamp: Date | null;
|
|
role: string;
|
|
content: string;
|
|
order: number;
|
|
createdAt: Date;
|
|
}>;
|
|
}): ChatSession {
|
|
return {
|
|
// Spread prismaSession to include all its properties
|
|
...prismaSession,
|
|
// Override properties that need conversion or specific mapping
|
|
id: prismaSession.id, // ChatSession.id from Prisma.Session.id
|
|
sessionId: prismaSession.id, // ChatSession.sessionId from Prisma.Session.id
|
|
startTime: new Date(prismaSession.startTime),
|
|
endTime: prismaSession.endTime ? new Date(prismaSession.endTime) : null,
|
|
createdAt: new Date(prismaSession.createdAt),
|
|
// Prisma.Session does not have an `updatedAt` field. We'll use `createdAt` as a fallback.
|
|
updatedAt: new Date(prismaSession.createdAt), // Fallback to createdAt
|
|
// Prisma.Session does not have a `userId` field.
|
|
userId: null, // Explicitly set to null or map if available from another source
|
|
// Prisma.Session does not have a `companyId` field.
|
|
companyId: "", // Explicitly set to empty string - should be resolved from session context
|
|
// Ensure nullable fields from Prisma are correctly mapped to ChatSession's optional or nullable fields
|
|
category: prismaSession.category ?? null,
|
|
language: prismaSession.language ?? null,
|
|
country: prismaSession.country ?? null,
|
|
ipAddress: prismaSession.ipAddress ?? null,
|
|
sentiment: prismaSession.sentiment ?? null,
|
|
messagesSent: prismaSession.messagesSent ?? undefined, // Maintain consistency with other nullable fields
|
|
avgResponseTime: prismaSession.avgResponseTime ?? null,
|
|
escalated: prismaSession.escalated ?? false,
|
|
forwardedHr: prismaSession.forwardedHr ?? false,
|
|
initialMsg: prismaSession.initialMsg ?? undefined,
|
|
fullTranscriptUrl: prismaSession.fullTranscriptUrl ?? undefined,
|
|
summary: prismaSession.summary ?? undefined, // New field
|
|
transcriptContent: undefined, // Not available in Session model
|
|
messages:
|
|
prismaSession.messages?.map((msg) => ({
|
|
id: msg.id,
|
|
sessionId: msg.sessionId,
|
|
timestamp: msg.timestamp ? new Date(msg.timestamp) : new Date(),
|
|
role: msg.role,
|
|
content: msg.content,
|
|
order: msg.order,
|
|
createdAt: new Date(msg.createdAt),
|
|
})) ?? [], // New field - parsed messages
|
|
};
|
|
}
|
|
|
|
export async function GET(
|
|
_request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
const { id } = await params;
|
|
|
|
if (!id) {
|
|
return NextResponse.json(
|
|
{ error: "Session ID is required" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
try {
|
|
const prismaSession = await prisma.session.findUnique({
|
|
where: { id },
|
|
include: {
|
|
messages: {
|
|
orderBy: { order: "asc" },
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!prismaSession) {
|
|
return NextResponse.json({ error: "Session not found" }, { status: 404 });
|
|
}
|
|
|
|
// Map Prisma session object to ChatSession type
|
|
const session: ChatSession = mapPrismaSessionToChatSession(prismaSession);
|
|
|
|
return NextResponse.json({ session });
|
|
} catch (error) {
|
|
const errorMessage =
|
|
error instanceof Error ? error.message : "An unknown error occurred";
|
|
return NextResponse.json(
|
|
{ error: "Failed to fetch session", details: errorMessage },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|