chatbot-template/app/(chat)/chat/[id]/page.tsx

77 lines
1.9 KiB
TypeScript
Raw Normal View History

import { cookies } from "next/headers";
import { notFound, redirect } from "next/navigation";
2023-05-19 12:33:56 -04:00
import { auth } from "@/app/(auth)/auth";
import { Chat } from "@/components/chat";
import { DataStreamHandler } from "@/components/data-stream-handler";
import { DEFAULT_CHAT_MODEL } from "@/lib/ai/models";
import { getChatById, getMessagesByChatId } from "@/lib/db/queries";
import { convertToUIMessages } from "@/lib/utils";
2024-10-11 18:00:22 +05:30
2024-11-15 12:18:17 -05:00
export default async function Page(props: { params: Promise<{ id: string }> }) {
2024-10-23 12:21:30 -04:00
const params = await props.params;
2024-10-11 18:00:22 +05:30
const { id } = params;
2024-11-05 17:15:51 +03:00
const chat = await getChatById({ id });
2024-10-11 18:00:22 +05:30
2024-11-05 17:15:51 +03:00
if (!chat) {
2024-10-11 18:00:22 +05:30
notFound();
2023-06-16 21:52:01 +04:00
}
2024-10-11 18:00:22 +05:30
const session = await auth();
2025-04-25 23:40:15 -07:00
if (!session) {
redirect("/api/auth/guest");
2025-04-25 23:40:15 -07:00
}
if (chat.visibility === "private") {
2025-04-25 23:40:15 -07:00
if (!session.user) {
return notFound();
}
if (session.user.id !== chat.userId) {
return notFound();
}
2023-06-16 15:28:43 -04:00
}
2024-10-11 18:00:22 +05:30
2024-11-05 17:15:51 +03:00
const messagesFromDb = await getMessagesByChatId({
id,
});
const uiMessages = convertToUIMessages(messagesFromDb);
const cookieStore = await cookies();
const chatModelFromCookie = cookieStore.get("chat-model");
if (!chatModelFromCookie) {
return (
<>
<Chat
autoResume={true}
id={chat.id}
initialChatModel={DEFAULT_CHAT_MODEL}
initialLastContext={chat.lastContext ?? undefined}
initialMessages={uiMessages}
initialVisibilityType={chat.visibility}
isReadonly={session?.user?.id !== chat.userId}
/>
<DataStreamHandler />
</>
);
}
return (
2024-12-20 23:07:23 +05:30
<>
<Chat
autoResume={true}
2024-12-20 23:07:23 +05:30
id={chat.id}
initialChatModel={chatModelFromCookie.value}
initialLastContext={chat.lastContext ?? undefined}
initialMessages={uiMessages}
initialVisibilityType={chat.visibility}
2024-12-20 23:07:23 +05:30
isReadonly={session?.user?.id !== chat.userId}
/>
<DataStreamHandler />
2024-12-20 23:07:23 +05:30
</>
);
2023-06-02 15:15:35 -04:00
}