diff --git a/models/Conversation.js b/models/Conversation.js new file mode 100644 index 0000000000..bfec27b9ea --- /dev/null +++ b/models/Conversation.js @@ -0,0 +1,34 @@ +const mongoose = require('mongoose'); +const { Message } = require('./Message'); + +const convoSchema = mongoose.Schema({ + conversationId: { + type: String, + unique: true, + required: true + }, + parentMessageId: { + type: String, + required: true + }, + messages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Message' }], + created: { + type: Date, + default: Date.now + } +}); + +const Conversation = + mongoose.models.Conversation || mongoose.model('Conversation', convoSchema); + +module.exports = { + saveConversation: async ({ conversationId, parentMessageId }) => { + const messages = await Message.find({ conversationId }); + + await Conversation.findOneAndUpdate( + { conversationId }, + { $set: { parentMessageId, messages } }, + { new: true, upsert: true } + ).exec(); + } +}; diff --git a/models/Message.js b/models/Message.js index b5c23d4f8e..c56283bb40 100644 --- a/models/Message.js +++ b/models/Message.js @@ -40,5 +40,6 @@ module.exports = { sender, text }); - } + }, + Message, } \ No newline at end of file diff --git a/server/index.js b/server/index.js index 71be42e526..d2452b95d9 100644 --- a/server/index.js +++ b/server/index.js @@ -2,6 +2,7 @@ const express = require('express'); const { ask } = require('../app/chatgpt'); const dbConnect = require('../models/dbConnect'); const { saveMessage } = require('../models/Message'); +const { saveConversation } = require('../models/Conversation'); const crypto = require('crypto'); const path = require('path'); const cors = require('cors'); @@ -55,6 +56,7 @@ app.post('/ask', async (req, res) => { gptResponse.sender = 'GPT'; await saveMessage(gptResponse); + await saveConversation(gptResponse); res.write(`event: message\ndata: ${JSON.stringify(gptResponse)}\n\n`); res.end();