diff --git a/models/Conversation.js b/models/Conversation.js index 69743c5d37..1096a6dcc2 100644 --- a/models/Conversation.js +++ b/models/Conversation.js @@ -1,5 +1,5 @@ const mongoose = require('mongoose'); -const { getMessages } = require('./Message'); +const { getMessages, deleteMessages } = require('./Message'); const convoSchema = mongoose.Schema({ conversationId: { @@ -26,7 +26,7 @@ const Conversation = mongoose.models.Conversation || mongoose.model('Conversation', convoSchema); module.exports = { - saveConversation: async ({ conversationId, parentMessageId, title }) => { + saveConvo: async ({ conversationId, parentMessageId, title }) => { const messages = await getMessages({ conversationId }); const update = { parentMessageId, messages }; if (title) { @@ -39,5 +39,16 @@ module.exports = { { new: true, upsert: true } ).exec(); }, - getConversations: async () => await Conversation.find({}).exec(), + getConvos: async () => await Conversation.find({}).exec(), + deleteConvos: async (filter) => { + // const filter = {}; + + // if (!!conversationId) { + // filter = conversationId; + // } + + let deleteCount = await Conversation.deleteMany(filter).exec(); + deleteCount.messages = await deleteMessages(filter); + return deleteCount; + } }; diff --git a/server/index.js b/server/index.js index b8958cd16c..5fa4992680 100644 --- a/server/index.js +++ b/server/index.js @@ -1,8 +1,8 @@ const express = require('express'); const dbConnect = require('../models/dbConnect'); const { ask, titleConversation } = require('../app/chatgpt'); -const { saveMessage, getMessages, deleteAllMessages } = require('../models/Message'); -const { saveConversation, getConversations } = require('../models/Conversation'); +const { saveMessage, getMessages } = require('../models/Message'); +const { saveConvo, getConvos, deleteConvos } = require('../models/Conversation'); const crypto = require('crypto'); const path = require('path'); const cors = require('cors'); @@ -22,7 +22,7 @@ app.get('/', function (req, res) { }); app.get('/convos', async (req, res) => { - res.status(200).send(await getConversations()); + res.status(200).send(await getConvos()); }); app.get('/messages/:conversationId', async (req, res) => { @@ -31,10 +31,20 @@ app.get('/messages/:conversationId', async (req, res) => { }); app.post('/clear_convos', async (req, res) => { - const { conversationId } = req.body; + let filter = {}; + const { conversationId } = req.body.arg; console.log('conversationId', conversationId); - const filter = {}; - res.status(201).send(await deleteAllMessages(filter)); + if (!!conversationId) { + filter = { conversationId }; + } + + try { + const dbResponse = await deleteConvos(filter); + res.status(201).send(dbResponse); + } catch (error) { + console.error(error); + res.status(500).send(error); + } }); app.post('/ask', async (req, res) => { @@ -51,6 +61,8 @@ app.post('/ask', async (req, res) => { 'X-Accel-Buffering': 'no' }); + // res.write(`event: message\ndata: ${JSON.stringify('')}\n\n`); + let i = 0; const progressCallback = async (partial) => { // console.log('partial', partial); @@ -74,7 +86,7 @@ app.post('/ask', async (req, res) => { gptResponse.sender = 'GPT'; await saveMessage(gptResponse); - await saveConversation(gptResponse); + await saveConvo(gptResponse); res.write(`event: message\ndata: ${JSON.stringify(gptResponse)}\n\n`); res.end(); diff --git a/src/App.jsx b/src/App.jsx index 8a9153ac6d..2db12c6127 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -4,14 +4,14 @@ import Messages from './components/main/Messages'; import TextChat from './components/main/TextChat'; import Nav from './components/Nav'; import MobileNav from './components/Nav/MobileNav'; -import useSWR from 'swr'; - -const fetcher = (url) => fetch(url).then((res) => res.json()); -// const postRequest = async (url, { arg }) => await axios.post(url, { arg }); +import { swr } from './utils/fetchers'; +import useDidMountEffect from './hooks/useDidMountEffect'; const App = () => { - const messages = useSelector((state) => state.messages); - const { data, error, isLoading, mutate } = useSWR('http://localhost:3050/convos', fetcher); + const { messages } = useSelector((state) => state.messages); + const convo = useSelector((state) => state.convo); + const { data, error, isLoading, mutate } = swr('http://localhost:3050/convos'); + useDidMountEffect(() => mutate(), [convo]); return (