const Message = require('./schema/messageSchema'); module.exports = { Message, async saveMessage({ messageId, newMessageId, conversationId, parentMessageId, sender, text, isCreatedByUser = false, error, unfinished, cancelled, tokenCount = null, plugin = null, model = null, }) { try { // may also need to update the conversation here await Message.findOneAndUpdate( { messageId }, { messageId: newMessageId || messageId, conversationId, parentMessageId, sender, text, isCreatedByUser, error, unfinished, cancelled, tokenCount, plugin, model, }, { upsert: true, new: true }, ); return { messageId, conversationId, parentMessageId, sender, text, isCreatedByUser, tokenCount, }; } catch (err) { console.error(`Error saving message: ${err}`); throw new Error('Failed to save message.'); } }, async updateMessage(message) { try { const { messageId, ...update } = message; const updatedMessage = await Message.findOneAndUpdate({ messageId }, update, { new: true }); if (!updatedMessage) { throw new Error('Message not found.'); } return { messageId: updatedMessage.messageId, conversationId: updatedMessage.conversationId, parentMessageId: updatedMessage.parentMessageId, sender: updatedMessage.sender, text: updatedMessage.text, isCreatedByUser: updatedMessage.isCreatedByUser, tokenCount: updatedMessage.tokenCount, }; } catch (err) { console.error(`Error updating message: ${err}`); throw new Error('Failed to update message.'); } }, async deleteMessagesSince({ messageId, conversationId }) { try { const message = await Message.findOne({ messageId }).lean(); if (message) { return await Message.find({ conversationId }).deleteMany({ createdAt: { $gt: message.createdAt }, }); } } catch (err) { console.error(`Error deleting messages: ${err}`); throw new Error('Failed to delete messages.'); } }, async getMessages(filter) { try { return await Message.find(filter).sort({ createdAt: 1 }).lean(); } catch (err) { console.error(`Error getting messages: ${err}`); throw new Error('Failed to get messages.'); } }, async deleteMessages(filter) { try { return await Message.deleteMany(filter); } catch (err) { console.error(`Error deleting messages: ${err}`); throw new Error('Failed to delete messages.'); } }, };