feat: update model use time

This commit is contained in:
archer 2023-05-29 22:51:09 +08:00
parent 2fce76202a
commit 2fc31a706d
No known key found for this signature in database
GPG Key ID: 569A5660D2379E28
5 changed files with 62 additions and 44 deletions

View File

@ -62,7 +62,7 @@ export const createShareChat = (
) => POST<string>(`/chat/shareChat/create`, data); ) => POST<string>(`/chat/shareChat/create`, data);
/** /**
* get shareChat * get shareChat
*/ */
export const getShareChatList = (modelId: string) => export const getShareChatList = (modelId: string) =>
GET<ShareChatSchema[]>(`/chat/shareChat/list?modelId=${modelId}`); GET<ShareChatSchema[]>(`/chat/shareChat/list?modelId=${modelId}`);

View File

@ -1,7 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next'; import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@/service/response'; import { jsonRes } from '@/service/response';
import { ChatItemType } from '@/types/chat'; import { ChatItemType } from '@/types/chat';
import { connectToDatabase, Chat } from '@/service/mongo'; import { connectToDatabase, Chat, Model } from '@/service/mongo';
import { authModel } from '@/service/utils/auth'; import { authModel } from '@/service/utils/auth';
import { authUser } from '@/service/utils/auth'; import { authUser } from '@/service/utils/auth';
import mongoose from 'mongoose'; import mongoose from 'mongoose';
@ -65,27 +65,36 @@ export async function saveChat({
})) || [] })) || []
})); }));
// 没有 chatId, 创建一个对话 const [id] = await Promise.all([
if (!chatId) { ...(chatId // update chat
const { _id } = await Chat.create({ ? [
_id: newChatId ? new mongoose.Types.ObjectId(newChatId) : undefined, Chat.findByIdAndUpdate(chatId, {
userId, $push: {
modelId, content: {
content, $each: content
title: content[0].value.slice(0, 20), }
latestChat: content[1].value },
}); title: content[0].value.slice(0, 20),
return _id; latestChat: content[1].value,
} else { updateTime: new Date()
await Chat.findByIdAndUpdate(chatId, { }).then(() => '')
$push: { ]
content: { : [
$each: content Chat.create({
} _id: newChatId ? new mongoose.Types.ObjectId(newChatId) : undefined,
}, userId,
title: content[0].value.slice(0, 20), modelId,
latestChat: content[1].value, content,
title: content[0].value.slice(0, 20),
latestChat: content[1].value
}).then((res) => res._id)
]),
Model.findByIdAndUpdate(modelId, {
updateTime: new Date() updateTime: new Date()
}); }) // update model
} ]);
return {
id
};
} }

View File

@ -20,7 +20,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
}, },
'_id avatar name chat.systemPrompt' '_id avatar name chat.systemPrompt'
).sort({ ).sort({
_id: -1 updateTime: -1
}), }),
Collection.find({ userId }) Collection.find({ userId })
.populate({ .populate({

View File

@ -105,7 +105,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
const { copyData } = useCopyData(); const { copyData } = useCopyData();
const { isPc } = useGlobalStore(); const { isPc } = useGlobalStore();
const { Loading, setIsLoading } = useLoading(); const { Loading, setIsLoading } = useLoading();
const { userInfo } = useUserStore(); const { userInfo, loadMyModels } = useUserStore();
const { isOpen: isOpenSlider, onClose: onCloseSlider, onOpen: onOpenSlider } = useDisclosure(); const { isOpen: isOpenSlider, onClose: onCloseSlider, onOpen: onOpenSlider } = useDisclosure();
// close contextMenu // close contextMenu
@ -228,13 +228,21 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
}) })
})); }));
// refresh history // refresh data
setTimeout(() => { loadHistory({ pageNum: 1, init: true });
loadHistory({ pageNum: 1, init: true }); loadMyModels(true);
generatingMessage(); generatingMessage();
}, 100);
}, },
[chatId, setForbidLoadChatData, generatingMessage, loadHistory, modelId, router, setChatData] [
chatId,
modelId,
setChatData,
loadHistory,
loadMyModels,
generatingMessage,
setForbidLoadChatData,
router
]
); );
/** /**
@ -458,14 +466,14 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
async ({ async ({
modelId, modelId,
chatId, chatId,
isLoading = false loading = false
}: { }: {
modelId: string; modelId: string;
chatId: string; chatId: string;
isLoading?: boolean; loading?: boolean;
}) => { }) => {
isLoading && setIsLoading(true);
try { try {
loading && setIsLoading(true);
const res = await getInitChatSiteInfo(modelId, chatId); const res = await getInitChatSiteInfo(modelId, chatId);
setChatData({ setChatData({
@ -500,18 +508,18 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
return null; return null;
}, },
[ [
router,
loadHistory,
setForbidLoadChatData,
scrollToBottom,
setChatData,
setIsLoading, setIsLoading,
setChatData,
scrollToBottom,
setForbidLoadChatData,
router,
setLastChatModelId,
setLastChatId, setLastChatId,
setLastChatModelId loadHistory
] ]
); );
// 初始化聊天框 // 初始化聊天框
const { isLoading } = useQuery(['init', modelId, chatId], () => { useQuery(['init', modelId, chatId], () => {
// pc: redirect to latest model chat // pc: redirect to latest model chat
if (!modelId && lastChatModelId) { if (!modelId && lastChatModelId) {
router.replace(`/chat?modelId=${lastChatModelId}&chatId=${lastChatId}`); router.replace(`/chat?modelId=${lastChatModelId}&chatId=${lastChatId}`);
@ -529,7 +537,8 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
return loadChatInfo({ return loadChatInfo({
modelId, modelId,
chatId chatId,
loading: true
}); });
}); });
@ -874,7 +883,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
</Box> </Box>
)} )}
<Loading loading={isLoading} fixed={false} /> <Loading fixed={false} />
</Flex> </Flex>
)} )}