Download backend/src/controllers/conversationController.js from chainr-ai/CHAINR: direct link, hf CLI and curl.
- Browser
- Download file 4.37 kB
-
https://huggingface.co/chainr-ai/CHAINR/resolve/main/backend/src/controllers/conversationController.js
- Command line
-
hf download hf://chainr-ai/CHAINR/backend/src/controllers/conversationController.js
-
curl -L -o conversationController.js https://huggingface.co/chainr-ai/CHAINR/resolve/main/backend/src/controllers/conversationController.js
4.37 kB
| const Conversation = require('../models/Conversation'); | |
| const Message = require('../models/Message'); | |
| const Joi = require('joi'); | |
| // Validation schemas | |
| const createConversationSchema = Joi.object({ | |
| title: Joi.string().min(1).max(100).required() | |
| }); | |
| const updateConversationSchema = Joi.object({ | |
| title: Joi.string().min(1).max(100), | |
| isArchived: Joi.boolean(), | |
| tags: Joi.array().items(Joi.string().trim()) | |
| }); | |
| // Create new conversation | |
| exports.createConversation = async (req, res) => { | |
| try { | |
| // Validate input | |
| const { error } = createConversationSchema.validate(req.body); | |
| if (error) { | |
| return res.status(400).json({ error: error.details[0].message }); | |
| } | |
| const { title } = req.body; | |
| const userId = req.userId; | |
| const conversation = new Conversation({ | |
| title, | |
| userId | |
| }); | |
| await conversation.save(); | |
| res.status(201).json({ | |
| message: 'Conversation created successfully', | |
| conversation | |
| }); | |
| } catch (error) { | |
| console.error('Create conversation error:', error); | |
| res.status(500).json({ error: 'Internal server error' }); | |
| } | |
| }; | |
| // Get user conversations | |
| exports.getConversations = async (req, res) => { | |
| try { | |
| const { page = 1, limit = 20, search, archived } = req.query; | |
| const userId = req.userId; | |
| // Build query | |
| const query = { userId }; | |
| if (archived !== undefined) { | |
| query.isArchived = archived === 'true'; | |
| } | |
| if (search) { | |
| query.title = { $regex: search, $options: 'i' }; | |
| } | |
| // Get conversations with pagination | |
| const conversations = await Conversation.find(query) | |
| .sort({ lastMessageAt: -1 }) | |
| .limit(limit * 1) | |
| .skip((page - 1) * limit); | |
| const total = await Conversation.countDocuments(query); | |
| res.json({ | |
| conversations, | |
| pagination: { | |
| page: parseInt(page), | |
| limit: parseInt(limit), | |
| total, | |
| pages: Math.ceil(total / limit) | |
| } | |
| }); | |
| } catch (error) { | |
| console.error('Get conversations error:', error); | |
| res.status(500).json({ error: 'Internal server error' }); | |
| } | |
| }; | |
| // Get single conversation | |
| exports.getConversation = async (req, res) => { | |
| try { | |
| const { conversationId } = req.params; | |
| const userId = req.userId; | |
| const conversation = await Conversation.findOne({ | |
| _id: conversationId, | |
| userId | |
| }); | |
| if (!conversation) { | |
| return res.status(404).json({ error: 'Conversation not found' }); | |
| } | |
| res.json({ conversation }); | |
| } catch (error) { | |
| console.error('Get conversation error:', error); | |
| res.status(500).json({ error: 'Internal server error' }); | |
| } | |
| }; | |
| // Update conversation | |
| exports.updateConversation = async (req, res) => { | |
| try { | |
| // Validate input | |
| const { error } = updateConversationSchema.validate(req.body); | |
| if (error) { | |
| return res.status(400).json({ error: error.details[0].message }); | |
| } | |
| const { conversationId } = req.params; | |
| const userId = req.userId; | |
| const updates = req.body; | |
| const conversation = await Conversation.findOneAndUpdate( | |
| { _id: conversationId, userId }, | |
| updates, | |
| { new: true, runValidators: true } | |
| ); | |
| if (!conversation) { | |
| return res.status(404).json({ error: 'Conversation not found' }); | |
| } | |
| res.json({ | |
| message: 'Conversation updated successfully', | |
| conversation | |
| }); | |
| } catch (error) { | |
| console.error('Update conversation error:', error); | |
| res.status(500).json({ error: 'Internal server error' }); | |
| } | |
| }; | |
| // Delete conversation | |
| exports.deleteConversation = async (req, res) => { | |
| try { | |
| const { conversationId } = req.params; | |
| const userId = req.userId; | |
| const conversation = await Conversation.findOneAndDelete({ | |
| _id: conversationId, | |
| userId | |
| }); | |
| if (!conversation) { | |
| return res.status(404).json({ error: 'Conversation not found' }); | |
| } | |
| // Delete all messages in the conversation | |
| await Message.deleteMany({ conversationId }); | |
| res.json({ message: 'Conversation deleted successfully' }); | |
| } catch (error) { | |
| console.error('Delete conversation error:', error); | |
| res.status(500).json({ error: 'Internal server error' }); | |
| } | |
| }; |