mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-12-17 17:18:14 +00:00
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import db from '@/lib/db';
|
|
import { chats } from '@/lib/db/schema';
|
|
import { eq, sql} from 'drizzle-orm';
|
|
|
|
export const GET = async (req: Request) => {
|
|
try {
|
|
// get header from request
|
|
const headers = await req.headers;
|
|
let userSessionId = headers.get('user-session-id')?.toString() ?? '';
|
|
|
|
if (userSessionId == '') {
|
|
return Response.json({ chats: {} }, { status: 200 });
|
|
}
|
|
|
|
let chatsRes = await db.query.chats.findMany({
|
|
where: eq(chats.userSessionId, userSessionId),
|
|
});
|
|
|
|
chatsRes = chatsRes.reverse();
|
|
// Keep only the latest 20 records in the database. Delete older records.
|
|
let maxRecordLimit = 20;
|
|
if (chatsRes.length > maxRecordLimit) {
|
|
const deleteChatsQuery = sql`DELETE FROM chats
|
|
WHERE userSessionId = ${userSessionId} AND (
|
|
timestamp IS NULL OR
|
|
timestamp NOT in (
|
|
SELECT timestamp FROM chats
|
|
WHERE userSessionId = ${userSessionId}
|
|
ORDER BY timestamp DESC
|
|
LIMIT ${maxRecordLimit}
|
|
)
|
|
)
|
|
`;
|
|
await db.run(deleteChatsQuery);
|
|
// Delete messages that no longer link with the chat from the database.
|
|
const deleteMessagesQuery = sql`DELETE FROM messages
|
|
WHERE chatId NOT IN (
|
|
SELECT id FROM chats
|
|
)
|
|
`;
|
|
await db.run(deleteMessagesQuery);
|
|
}
|
|
|
|
return Response.json({ chats: chatsRes }, { status: 200 });
|
|
} catch (err) {
|
|
console.error('Error in getting chats: ', err);
|
|
return Response.json(
|
|
{ message: 'An error has occurred.' },
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
};
|