106 lines
2.7 KiB
TypeScript
106 lines
2.7 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import getDatabase from '@/lib/database';
|
|
|
|
interface ChatSession {
|
|
id: string;
|
|
session_id: string;
|
|
user_id: string;
|
|
agent_id: string;
|
|
title: string;
|
|
message_count: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
interface ChatMessage {
|
|
id: string;
|
|
session_id: string;
|
|
message_type: string;
|
|
content: string;
|
|
created_at: string;
|
|
}
|
|
|
|
// GET - Get session details by id
|
|
export async function GET(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const { id } = await params;
|
|
const db = getDatabase();
|
|
|
|
if (!id) {
|
|
return NextResponse.json({ error: 'ID is required' }, { status: 400 });
|
|
}
|
|
|
|
// Get session details by id
|
|
const session = db.prepare(`
|
|
SELECT * FROM chat_sessions
|
|
WHERE id = ?
|
|
`).get(id) as ChatSession | undefined;
|
|
|
|
if (!session) {
|
|
return NextResponse.json({ error: 'Session not found' }, { status: 404 });
|
|
}
|
|
|
|
// Get messages for this session
|
|
const messages = db.prepare(`
|
|
SELECT * FROM chat_messages
|
|
WHERE session_id = ?
|
|
ORDER BY created_at ASC
|
|
`).all(session.session_id) as ChatMessage[];
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
session,
|
|
messages
|
|
}, { status: 200 });
|
|
|
|
} catch (error) {
|
|
console.error('Error fetching session details:', error);
|
|
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
// DELETE - Delete a specific chat session
|
|
export async function DELETE(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const { id } = await params;
|
|
const { searchParams } = new URL(request.url);
|
|
const user_id = searchParams.get('user_id');
|
|
const db = getDatabase();
|
|
|
|
if (!id) {
|
|
return NextResponse.json({ error: 'ID is required' }, { status: 400 });
|
|
}
|
|
|
|
if (!user_id) {
|
|
return NextResponse.json({ error: 'User ID is required' }, { status: 400 });
|
|
}
|
|
|
|
// Check if session exists and belongs to user
|
|
const session = db.prepare(`
|
|
SELECT id FROM chat_sessions
|
|
WHERE id = ? AND user_id = ?
|
|
`).get(id, user_id) as { id: string } | undefined;
|
|
|
|
if (!session) {
|
|
return NextResponse.json({ error: 'Session not found or access denied' }, { status: 404 });
|
|
}
|
|
|
|
// Delete session (messages will be deleted automatically due to CASCADE)
|
|
db.prepare('DELETE FROM chat_sessions WHERE id = ?').run(id);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Session deleted successfully'
|
|
}, { status: 200 });
|
|
|
|
} catch (error) {
|
|
console.error('Error deleting session:', error);
|
|
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
|
}
|
|
}
|